在内存中存储大量对象的最佳方法?

时间:2009-09-22 22:38:13

标签: .net collections object numbers

非常简单的问题,在内存中存储100 KB - 2 MB对象的方法是什么?对象由3个双打和2个字符串组成(大多数都在5个字符长之间)。使用struct而不是class会更好吗?

编辑:我不知道为什么我说双,它是漂浮..:S

4 个答案:

答案 0 :(得分:3)

处理大量对象时需要考虑两个主要问题。

第一个问题已经在Frederik Gheysels'answer中通过使用Fly权重模式得到解决,这是内存问题。

第二个问题是如何有效地添加和检索这些对象/结构(取决于您选择遵循的路径)。显然我假设你不只是创建这些对象而又不想再次检索它们;)

要回答这个问题,这实际上取决于您想要添加和访问数据的方式。从那里,您可以决定哪种数据结构最适合您的任务。例如,您可能希望以LIFO顺序处理这些对象,那么堆栈将是最有效的方式。

答案 1 :(得分:2)

是否有机会使用Flyweight pattern

如果您的类型表示值类型,则可以使用结构。 分配和解除分配的结构更便宜。考虑到设计指南,您可以在以下情况下使用结构:

  • 该类型的实例大小小于16个字节。
  • 实例是短暂的
  • 实例是不可变的(所有值类型都应该是imho)。

答案 2 :(得分:1)

我不知道你在做什么,但这些经验法则怎么样?

如果您必须将点存储在某种类型的集合中,那么将它们设为类以节省用于存储的装箱结构的开销。

如果您只是将这些点作为输入数据用于另一个对象进行处理,例如作为网格中的点进行处理,然后更喜欢一个数组来保存Collection类的开销。

如果你将点存储在一个数组中,那么只需要构造它们,因为这比制作它们更有效。

答案 3 :(得分:0)

我怀疑结构和类之间是否存在差异,当然不是在C ++中,它们本质上是相同的。在现代桌面系统上,您建议的2M对象大小并不大。