关于最优化读写,测试各个加锁:Lock、安全字典、信号量、ReaderWriterLock、ReaderWriterLockSlim
大家对于自身项目中都有本地缓存的逻辑,但这块的读写何种机制下哪个快,哪个慢,需要测试对比,以下测试报告,期望给大家一个借鉴,如果有更好的测试结果也欢迎大家一起讨论。
以下测试是开启10个并发任务对同一个字典进行10万次插入,就相当于100万次插入动作
TestLock //测试lock
Time Elapsed: ,342ms
CPU Cycles: ,,
Gen :
Gen :
Gen : TestSalfDictionary //测试线程安全字典
Time Elapsed: 259ms
CPU Cycles: ,
Gen :
Gen :
Gen : TestSemaphore //测试信号量
Time Elapsed: 588ms
CPU Cycles: ,
Gen :
Gen :
Gen : TestReaderWriterLock //测试ReaderWriterLock
Time Elapsed: ,576ms
CPU Cycles: ,
Gen :
Gen :
Gen : TestReaderWriterLockSlim //测试ReaderWriterLockSlim
Time Elapsed: 864ms
CPU Cycles: ,
Gen :
Gen :
Gen :
目前看下来安全字典的测试性能貌似最好的,ReaderWriteLock 效率最低,还不如lock,大家在今后项目中使用自己衡量一下!
关于信号量的测试代码,我贴一下,如觉得有更合理的运用它,欢迎来多多交流!
static readonly Semaphore _semaphore = new Semaphore(, );
static readonly IDictionary<int, int> _dictionaryForSemaphore = new Dictionary<int, int>();
static void TestSemaphore()
{
for (int i = ; i < _number; i++)
{
_semaphore.WaitOne();
Random random = new Random(int.MaxValue);
var key = random.Next(int.MaxValue);
if (!_dictionaryForSemaphore.ContainsKey(key))
_dictionaryForSemaphore.Add(key, i);
_semaphore.Release();
}
}
关于最优化读写,测试各个加锁:Lock、安全字典、信号量、ReaderWriterLock、ReaderWriterLockSlim的更多相关文章
- 第36章 SDIO—SD卡读写测试
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- MIG IP控制DDR3读写测试
本文设计思想采用明德扬至简设计法.在高速信号处理场合下,很短时间内就要缓存大量的数据,这时片内存储资源已经远远不够了.DDR SDRAM因其极高的性价比几乎是每一款中高档FPGA开发板的首选外部存储芯 ...
- 回看《例说FPGA》---DDR2控制器集成与读写测试
回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...
- 为什么多线程读写 shared_ptr 要加锁?
https://www.cnblogs.com/Solstice/archive/2013/01/28/2879366.html 为什么多线程读写 shared_ptr 要加锁? 陈硕(giantch ...
- 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock
[源码下载] 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLoc ...
- 【Linux】磁盘读写 测试
一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...
- NIO读写文件并加锁
一.读取文件 package lock; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExc ...
- 属性文件读写测试 PropertiesFileTest
属性文件对于程序的拓展提供了很大的方便,但是什么该怎么去读写,怎么样读写才会最优呢?这里我做了一个简单的测试, 一般而言主要的有三种配置文件,*.ini,*.properties,*.xml,如果有兴 ...
随机推荐
- (中等) HDU 1828 Picture,扫描线。
Problem Description A number of rectangular posters, photographs and other pictures of the same shap ...
- ASIHTTPRequest异步请求
我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...
- API WAVE 专栏
关于音频输入.输出设备的使用 源:API WAVE 专栏
- C#中BASE64和图片相互转换
//图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { ...
- UVa 10074 - Take the Land
题目大意:和UVa 836 - Largest Submatrix差不多,只需要修改一下数据就可以了. #include <cstdio> #include <cstring> ...
- 2.13.2. 对结果集进行筛选(Core Data 应用程序实践指南)
Core Data通过谓词(NSPredicate)来筛选,比如限定获取的数量等.谓词基本对存储区不敏感,但也有例外,比如:matches可用在 in-memory存储区,但是不能用在SQLite存储 ...
- delphi DBgrid应用大全
Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一.但是 DBGrid 缺省的外观未免显得单调和缺乏创意.其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目 ...
- --@angularJS--指令之单个点击展开demo
1.expander.html: <!DOCTYPE HTML><html ng-app="app"><head> <title&g ...
- easyui-datagrid分页查询
不想写语言描述了,直接代码吧! js: $(document).ready(function () { var driver_datagrid; $('#job').combobox({ url: ' ...
- easyui message show中msg嵌入一个按钮如何绑定事件
http://www.oschina.net/question/945028_171927