我想知道在游戏中使用ConcurrentDictionary作为主容器是否明智? 这将被用来:
在parallel.Foreach循环中更新其中的每个对象;
在parallel.Foreach循环中添加(但不删除)其内部的对象(有时在更新时);
从一个Linq查询字典中检索数据/简单地通过索引在有时并行循环,但主要是在主线程;
在并行循环中删除数据(但不是在更新对象时)< – 这一步可以在主线程中完成。
与HashSet相比,这个列表的缺点是什么(我们现在正在使用后者,但是我们只是在并行读取 – 在更新模型时)。 大型发动机使用什么清单?
我不希望在你的情况下使用ConcurrentDictionary会有明显的性能劣势,但是与我推荐的testing/性能分析并行的任何东西都是一样的。
另外,我还没有最大的引擎使用什么模糊的想法。 抱歉。
这就是说,让我们来检查你的4个用法对这里的信息: http : //arbel.net/2013/02/03/best-practices-for-using-concurrentdictionary/ (有趣的阅读,尤其是警告笔记。)
在我看来,使用ConcurrentDictionary的最大风险是记账/正确性。 这是与领土,特别是如果你在分布式和集中(主线程)逻辑之间来回转移。
只要你仔细比较你的使用/假设与CD所做的事情,这个改变应该会产生可靠的可扩展性,胜过你的HashSet实现。 考虑到额外的复杂性,但是,如果您还没有validationHashSet是一个重大的瓶颈,您可能首先要这样做。