首页新闻招聘找找看知识库

将HashTable的Keys复制到ArrayList中报错!

0
悬赏园豆:20 [已解决问题]

ArrayList keys = new ArrayList(QuoteCache.Keys);

QuoteCache.count=5000+

报错:目标数组的长度不足,无法复制集合中的所有项。请检查数组索引和长度。

Debug运行的时候虽然会报错,但F5继续后还能运行,但是不调试运行就卡死,是怎么回事。

唯恐的主页 唯恐 | 初学一级 | 园豆:181
提问于:2017-05-24 20:11
< >
分享
最佳答案
1

QuoteCache.count=5000+ 是啥情况,你把源内容的空间变更了吧,keys这个的长度还是没变更前的,估计空间不够越界了

收获园豆:15
2012 | 专家六级 |园豆:16467 | 2017-05-25 08:20

QuoteCache是一个Hashtable的集合,具体流程是:接收别人的实时数据填充到hashtable中,另外new了一个线程将HashTable中的数据取出来填充到dataTable中。其中根据一个Key值标记是新增还是更新数据,
因为HashTable不能使用foreach循环的,说以将它的Keys集合复制到ArrayList中。这种问题要怎么解决。谢谢了!

唯恐 | 园豆:181 (初学一级) | 2017-05-25 09:10

有没有解决思路!

唯恐 | 园豆:181 (初学一级) | 2017-05-25 14:46

@唯恐: 你上面的描述,估计是并发的问题,你可以先用1个线程试试

2012 | 园豆:16467 (专家六级) | 2017-05-25 16:00

@2012: 我加锁后倒是不报错了,但是程序不Debug运行的时候还是卡死,也没见报错,debug的时候也没报错。有什么方式检测吗?

唯恐 | 园豆:181 (初学一级) | 2017-05-25 17:11

@唯恐: 锁用的不对,死锁了可能。

2012 | 园豆:16467 (专家六级) | 2017-05-25 18:45
其他回答(1)
0

Hashtable实现了IEnumerable怎么可能不能遍历呢?

foreach(DictionaryEntry de in yourHashtableInstance)

{

  //....

}

收获园豆:5
Daniel Cai | 园豆:7502 (大侠五级) | 2017-05-25 09:16

因为在循环中还要修改集合中的数据,所以不能使用foreach。

唯恐 | 园豆:181 (初学一级) | 2017-05-25 09:19

@唯恐: 你要修改什么?修改value的话直接改就完了,用遍历去搞就不用用hash类的玩意了,直接List<Tuple<T1,T2>>

Daniel Cai | 园豆:7502 (大侠五级) | 2017-05-25 09:21
   您需要登录以后才能回答,未注册用户请先注册