结果
锁定:85.3微秒
Monitor.TryEnter:11.0微秒
锁是否扩展为相同的代码?
编辑:1000次迭代的结果:锁定:103.3微秒Monitor.TryEnter:20.2微秒
代码如下.谢谢
[Test]
public void Lock_Performance_Test()
{
const int lockIterations = 100;
Stopwatch csLock = Stopwatch.StartNew();
for (int i = 0; i < lockIterations; )
{
lock (object1)
{
i++;
}
}
csLock.Stop();
Stopwatch csMonitor = Stopwatch.StartNew();
for (int i = 0; i < lockIterations; )
{
if (Monitor.TryEnter(object1, TimeSpan.FromSeconds(10)))
{
try
{
i++;
}
finally
{
Monitor.Exit(object1);
}
}
}
csMonitor.Stop();
Console.WriteLine("Lock: {0:f1} microseconds", csLock.Elapsed.Ticks / 10M);
Console.WriteLine("Monitor.TryEnter: {0:f1} microseconds", csMonitor.Elapsed.Ticks / 10M);;
}
Run Code Online (Sandbox Code Playgroud) 我试图理解字符串实习,为什么在我的例子中似乎不起作用.示例的要点是显示示例1使用较少(内存较少),因为它在内存中应该只有10个字符串.但是,在下面的代码中,两个示例都使用大致相同的内存量(虚拟大小和工作集).
请告知为什么示例1没有使用更少的内存?谢谢
例1:
IList<string> list = new List<string>(10000);
for (int i = 0; i < 10000; i++)
{
for (int k = 0; k < 10; k++)
{
list.Add(string.Intern(k.ToString()));
}
}
Console.WriteLine("intern Done");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
例2:
IList<string> list = new List<string>(10000);
for (int i = 0; i < 10000; i++)
{
for (int k = 0; k < 10; k++)
{
list.Add(k.ToString());
}
}
Console.WriteLine("intern Done");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud) 如果我运行此代码,是否每个都AppDomain在不同的线程中执行?
ThreadPool.QueueUserWorkItem(delegate
{
/// Create AppDomain and run code
});
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题,一个死锁问题,如果我使用Visual Studio暂停程序并检查线程,我只能看到两个线程在等待锁.没有线程出现在锁定范围内!Visual Studio只是说谎或者如何在不释放锁的情况下退出锁定语句?
谢谢
似乎创造了更多.请在这里建议为什么或如何正确实习.
谢谢
IList<string> list = new List<string>(10000);
for (int i = 0; i < 10000; i++)
{
for (int k = 0; k < 10; k++)
{
list.Add(string.Intern(k.ToString()));
}
}
Console.WriteLine("intern Done");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)