你們對於自身項目中都有本地緩存的邏輯,但這塊的讀寫何種機制下哪一個快,哪一個慢,須要測試對比,如下測試報告,指望給你們一個借鑑,若是有更好的測試結果也歡迎你們一塊兒討論。緩存
如下測試是開啓10個併發任務對同一個字典進行10萬次插入,就至關於100萬次插入動做安全
TestLock //測試lock Time Elapsed: 1,342ms CPU Cycles: 56,099,316 Gen 0: 67 Gen 1: 1 Gen 2: 0 TestSalfDictionary //測試線程安全字典 Time Elapsed: 259ms CPU Cycles: 268,257 Gen 0: 67 Gen 1: 0 Gen 2: 0 TestSemaphore //測試信號量 Time Elapsed: 588ms CPU Cycles: 285,531 Gen 0: 67 Gen 1: 0 Gen 2: 0 TestReaderWriterLock //測試ReaderWriterLock Time Elapsed: 4,576ms CPU Cycles: 241,155 Gen 0: 67 Gen 1: 0 Gen 2: 0 TestReaderWriterLockSlim //測試ReaderWriterLockSlim Time Elapsed: 864ms CPU Cycles: 288,810 Gen 0: 67 Gen 1: 0 Gen 2: 0
目前看下來安全字典的測試性能貌似最好的,ReaderWriteLock 效率最低,還不如lock,你們在從此項目中使用本身衡量一下!併發
關於信號量的測試代碼,我貼一下,如以爲有更合理的運用它,歡迎來多多交流!dom
static readonly Semaphore _semaphore = new Semaphore(10, 10); static readonly IDictionary<int, int> _dictionaryForSemaphore = new Dictionary<int, int>(); static void TestSemaphore() { for (int i = 0; i < _number; i++) { _semaphore.WaitOne(100); Random random = new Random(int.MaxValue); var key = random.Next(int.MaxValue); if (!_dictionaryForSemaphore.ContainsKey(key)) _dictionaryForSemaphore.Add(key, i); _semaphore.Release(); } }