大家对于自身项目中都有本地缓存的逻辑,但这块的读写何种机制下哪个快,哪个慢,需要测试对比,以下测试报告,期望给大家一个借鉴,如果有更好的测试结果也欢迎大家一起讨论。

以下测试是开启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的更多相关文章

  1. 第36章 SDIO—SD卡读写测试

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  2. 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  3. MIG IP控制DDR3读写测试

    本文设计思想采用明德扬至简设计法.在高速信号处理场合下,很短时间内就要缓存大量的数据,这时片内存储资源已经远远不够了.DDR SDRAM因其极高的性价比几乎是每一款中高档FPGA开发板的首选外部存储芯 ...

  4. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  5. 为什么多线程读写 shared_ptr 要加锁?

    https://www.cnblogs.com/Solstice/archive/2013/01/28/2879366.html 为什么多线程读写 shared_ptr 要加锁? 陈硕(giantch ...

  6. 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock

    [源码下载] 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLoc ...

  7. 【Linux】磁盘读写 测试

    一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...

  8. NIO读写文件并加锁

    一.读取文件 package lock; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExc ...

  9. 属性文件读写测试 PropertiesFileTest

    属性文件对于程序的拓展提供了很大的方便,但是什么该怎么去读写,怎么样读写才会最优呢?这里我做了一个简单的测试, 一般而言主要的有三种配置文件,*.ini,*.properties,*.xml,如果有兴 ...

随机推荐

  1. (中等) HDU 1828 Picture,扫描线。

    Problem Description A number of rectangular posters, photographs and other pictures of the same shap ...

  2. ASIHTTPRequest异步请求

    我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...

  3. API WAVE 专栏

    关于音频输入.输出设备的使用 源:API WAVE 专栏

  4. C#中BASE64和图片相互转换

    //图片 转为    base64编码的文本        private void button1_Click(object sender, EventArgs e)        {        ...

  5. UVa 10074 - Take the Land

    题目大意:和UVa 836 - Largest Submatrix差不多,只需要修改一下数据就可以了. #include <cstdio> #include <cstring> ...

  6. 2.13.2. 对结果集进行筛选(Core Data 应用程序实践指南)

    Core Data通过谓词(NSPredicate)来筛选,比如限定获取的数量等.谓词基本对存储区不敏感,但也有例外,比如:matches可用在 in-memory存储区,但是不能用在SQLite存储 ...

  7. delphi DBgrid应用大全

    Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一.但是 DBGrid 缺省的外观未免显得单调和缺乏创意.其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目 ...

  8. --@angularJS--指令之单个点击展开demo

    1.expander.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title&g ...

  9. easyui-datagrid分页查询

    不想写语言描述了,直接代码吧! js: $(document).ready(function () { var driver_datagrid; $('#job').combobox({ url: ' ...

  10. easyui message show中msg嵌入一个按钮如何绑定事件

    http://www.oschina.net/question/945028_171927