2

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

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

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

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

4

2 回答 2

3

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

我不得不问,Objects1 和 Objects2 来自哪里?听起来好像您可以在数据库级别执行此操作,并且比在 C# 中执行此操作要高效得多!

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

于 2012-06-04T22:31:25.293 回答
0

字典存储 KeyValuePair 的实例

如果您想要做的只是在给定它们的字典中查找值Key,那么是的,Dictionary 是要走的路 - 他们很快就能做到这一点。Value但是,如果您想使用它的or 属性对项目进行排序或搜索,最好使用 else

就大小而言,它们会随着变大而变慢,值得做一些基准测试以了解它如何影响您的需求,但您始终可以根据它们的类型或范围将值拆分到多个字典中。http://www.dotnetperls.com/dictionary-size

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

于 2012-06-04T22:34:36.583 回答