C#中各種Lock的速度比較

iDotNetSpace發表於2009-03-04

簡單寫了個小程式,比較了一下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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-561381/,如需轉載,請註明出處,否則將追究法律責任。

相關文章