C#字典添加项报错“索引超出了数组界限”,是M$的BUG吗? NO! 前人傻逼!
作者:V君 发布于:2018-11-16 11:29 Friday 分类:填坑经验
TL;DR: 给我用并发字典,如果是3.5及以下,就锁起来!
依旧是陈年老项目,最近开始发现有大面积丢数据的情况,在日志看到大片的索引越界异常.
Exception: 索引超出了数组界限。
在 System.Collections.Generic.Dictionary`2.Insert(TKey , TValue , Boolean )
在 System.Collections.Generic.Dictionary`2.Add(TKey , TValue )
乍一看,还以为是M$的BUG,从系统库内部爆出来的非预期异常.
按预期,字典能爆的异常应该只有重复key.
在阅读代码之前先用关键字喂狗,吐出爆栈,看到竟态现象.
而且,字典的状态一旦坏掉就会一直坏下去...
开始阅读代码,果然 -- 字典添加和移除操作在不同线程,且未加锁 -- 3.5没有并发字典
简单加锁发布修复版本交差.
blogger
热门日志
随机日志
最新日志
分类
存档
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)
最新评论
- V君
@Ninokz:emmmmm? - Ninokz
10月文章,摸了... - [数据删除]
[数据删除] - [数据删除]
[数据删除] - [数据删除]
[数据删除] - [数据删除]
[数据删除] - [数据删除]
[数据删除] - [数据删除]
[数据删除] - [数据删除]
[数据删除] - V君
@Ninokz:haha..