使用IEnumerable.ToDictionary()时,对于字典来说什么会太大?

时间:2012-06-04 22:19:15

标签: c# performance design-patterns dictionary ienumerable

说,在我的方法中,我传入了几个IEnumerables(可能是因为我要从db或其他东西中获取一堆对象)。

然后对于objects1中的每个对象,我想从具有相同object.iD的objects2中拉出一个diffobject。

我不想要多个枚举(根据resharper),所以我可以将objects2变成一个用object.iD键入的字典。然后我只列举一次。 (次要问题)这是一个好的模式吗?

(主要问题)什么太大了?在什么时候这将是一个可怕的模式?字典中有多少个对象是太多的对象?

2 个答案:

答案 0 :(得分:3)

在内部,它将被阻止拥有超过20亿件物品。由于事物在字典中的定位方式相当复杂,如果我在处理十亿个项目(例如,如果是16位值,然后是2GB),我会将它们存储在数据库中并且使用数据访问代码检索它们。

我不得不问,Objects1和Objects2来自哪里?听起来好像你可以在数据库级别这样做,它会比在C#中做得更多,更有效率!

您可能还想考虑使用KeyValuePair []

答案 1 :(得分:0)

字典存储KeyValuePair的实例

如果您想要做的就是在给出Key的字典中查找值,那么是的,字典是要走的路 - 他们很快就这么做了。但是,如果您要使用Value或其属性对项目进行排序或搜索,则最好use something else

就大小而言,随着它们变大,它们会变慢一点,值得做一些基准测试来看看它是如何影响你的需求的,但是你总是可以根据它们的类型或范围在多个词典中分割值。 http://www.dotnetperls.com/dictionary-size

值得注意的是,当你说“然后我只为每个人列举一次”时,这有点不正确。 objects1将完全枚举,但objects2的字典将不会被枚举。只要您使用Key检索值,它就会对键进行散列并使用结果来计算存储值的位置,因此字典可以很快达到您要求的值。理想情况下,对Key使用int,因为它可以直接使用它作为哈希。您可以枚举它们,但最好使用objects2Dictionary[key]查找对象。