C#中各种Lock的速度比较

简单写了个小程序,比较了一下C#中各种Lock的速度(前提是都没有进入wait状态)。

各进入离开Lock 1kw次,结果如下:

Lock Time (ms)
CriticalSection 726
Interlocked 344
Readerslim 1932
Writerslim 1513
Reader 3754
Writer 3430
Mutex 24998
Semaphore 24197
Event 22549

 

结论如下:

  1. Interlocked可以直接编译为CPU指令,速度最快,虽然功能较少但能用则用。
  2. CriticalSection(也就是lock关键字或者Monitor.Enter()方法)仅比Interlocked慢,建议使用。
  3. 对于ReaderWriterLock和ReaderWriterLockSlim,Slim快近一倍,但缺点是不能track owner,也就是同一线程不能多次进入同一个lock。Reader比Writer要慢,估计是要维护reader count的原因。
  4. Mutex,Semaphore,Event即使可以获得lock也要进入内核模式,所以最慢,要尽量避免使用。

代码下载:

http://usayjq.bay.livefilestore.com/y1pbebZJ6xcesXSXcujFmihM0LVhFuA62IJ37Gz0vgDI2CLDpEGuwwB_E1E5CnDpJBQoVgilKW-61Y/LockSpeedTester.zip?download

 

转自:http://www.cnblogs.com/palo/archive/2009/03/03/1402642.html

你可能感兴趣的:(Lock)