【发布时间】:2011-01-25 21:14:12
【问题描述】:
结果
锁定: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);;
}
【问题讨论】:
-
我不反对你的发现,但建议你尝试超过 100 次迭代。
-
您能否重复相同的测试,但使用 Date.Now 代替(并使用适当大量的迭代将数字推入秒数)。我担心的是:support.microsoft.com/default.aspx?scid=KB;EN-US;Q274323
-
有关信息,请注意
TimeSpan.FromSeconds(10)无助于获得简单的基准。
标签: c#