ConcurrentDictionary作为游戏对象的主要容器?

我想知道在游戏中使用ConcurrentDictionary作为主容器是否明智? 这将被用来:

与HashSet相比,这个列表的缺点是什么(我们现在正在使用后者,但是我们只是在并行读取 – 在更新模型时)。 大型发动机使用什么清单?

我不希望在你的情况下使用ConcurrentDictionary会有明显的性能劣势,但是与我推荐的testing/性能分析并行的任何东西都是一样的。

另外,我还没有最大的引擎使用什么模糊的想法。 抱歉。

这就是说,让我们来检查你的4个用法对这里的信息: http : //arbel.net/2013/02/03/best-practices-for-using-concurrentdictionary/ (有趣的阅读,尤其是警告笔记。)

  1. 更新应该没有什么不同,不过你要考虑在循环过程中枚举器是否可以改变是否是一个问题。 (这些枚举器不是快照。)
  2. 您可能需要一些簿记来控制中间更新循环添加的更新。 看起来这些附加function不会因为多重lockingdevise而导致显着的争用,但是您需要自行validation。
  3. 检索“通过索引”似乎有点腥,这取决于你在想什么。 Linq似乎很好。
  4. 删除应该没问题,虽然枚举器可以改变,所以要小心并行循环。

在我看来,使用ConcurrentDictionary的最大风险是记账/正确性。 这是与领土,特别是如果你在分布式和集中(主线程)逻辑之间来回转移。

只要你仔细比较你的使用/假设与CD所做的事情,这个改变应该会产生可靠的可扩展性,胜过你的HashSet实现。 考虑到额外的复杂性,但是,如果您还没有validationHashSet是一个重大的瓶颈,您可能首先要这样做。