此篇写于2009年11月 22日,一直处草稿状态,本想写的更深入些,就这样吧。
1),多线程下如何安全的遍历一个Dictionary?
lock (_syncRoot)
{
foreach (string s in Dictionary.Values)
{
//todo耗时操作
}
}
2),多线程下如何安全遍历一个非常大的Dictionary?
如果采用1)中的代码,效率是非常低的!ReaderWriterLockSlim?也不用。
国民党人总结《论持久战》:以空间换时间,积小胜为大胜。
其实在算法上讲,最后一句应该是分治。而前一句“空间换时间”在某些情况下也堪称救世良药。
那我们就来个镜像(称为:clone),对镜像的一切操作均不影响主(main)的任何运行时结构。
Dictionary<int, string> clone = new Dictionary<int, string>(main);
然后遍历clone就可以了: foreach (string s in clone.Values)
{
//todo
}