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 |
結論如下:
- Interlocked可以直接編譯為CPU指令,速度最快,雖然功能較少但能用則用。
- CriticalSection(也就是lock關鍵字或者Monitor.Enter()方法)僅比Interlocked慢,建議使用。
- 對於ReaderWriterLock和ReaderWriterLockSlim,Slim快近一倍,但缺點是不能track owner,也就是同一執行緒不能多次進入同一個lock。Reader比Writer要慢,估計是要維護reader count的原因。
- Mutex,Semaphore,Event即使可以獲得lock也要進入核心模式,所以最慢,要儘量避免使用。
程式碼下載:
http://usayjq.bay.livefilestore.com/y1pbebZJ6xcesXSXcujFmihM0LVhFuA62IJ37Gz0vgDI2CLDpEGuwwB_E1E5CnDpJBQoVgilKW-61Y/LockSpeedTester.zip?download
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-561381/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於insert /*+ append*/ 各種insert插入速度比較APP
- stl中各種容器的自定義比較函式函式
- Selenium各種工具比較
- C#中的各種各樣的索引器C#索引
- JS嵌入html的方式及各種方式的比較JSHTML
- 各種時間型別的轉換及比較型別
- js中各個型別之間的比較JS型別
- 各種富文字/ HTML編輯器和框架比較HTML框架
- 比較JS合併陣列的各種方法及其優劣JS陣列
- 各種不同檔案系統的比較,資訊很詳細
- 各種無線接入系統比較分析的準則(轉)
- c#中結構體和類的比較C#結構體
- sequence可能引發的各種lock/enqueueENQ
- Javascript中的幾種繼承方式比較JavaScript繼承
- java中四種操作xml方式的比較JavaXML
- C# DataRow 比較C#
- javascript訪問不同物件的速度比較JavaScript物件
- 密碼學之各種加解密演算法比較密碼學解密演算法
- MySQL大量資料插入各種方法效能分析與比較MySql
- 幾種排序的比較排序
- Perl程式與c程式速度的比較(轉)C程式
- 比較 Informix Version 11 的各個版本ORM
- Go與C#的比較 - RedditGoC#
- Lock的獨佔鎖和共享鎖的比較分析
- php,asp,jsp,c,速度比較 (轉)PHPJS
- 【JavaSE】Lock鎖和synchronized鎖的比較,lock鎖的特性,讀寫鎖的實現。Javasynchronized
- C#中陣列Array、ArrayList、泛型List<T>的比較C#陣列泛型
- Java中的幾種Kafka客戶端比較介紹JavaKafka客戶端
- 七種WebSocket框架的效能比較Web框架
- 四種Actor框架比較框架
- c# 對檔案的各種操作C#
- 比較有索引和無索引的查詢速度(在mysql資料庫中)索引MySql資料庫
- 排序(3)--各類排序演算法的比較排序演算法
- 各區塊鏈架構的橫向比較區塊鏈架構
- Linux各主要發行版的比較(轉)Linux
- Java排序演算法速度比較(轉載)Java排序演算法
- C#比較dynamic和Dictionary效能C#
- 在java中進行日期時間比較的4種方法Java