代码之家  ›  专栏  ›  技术社区  ›  Denis Biondic

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

  •  1
  • Denis Biondic  · 技术社区  · 16 年前

    很简单的问题,在内存中存储100kb-2MB对象的方法是什么?对象由3个双精度和两个字符串组成(两个字符串的长度都在5个字符以下)。使用结构而不是类会更好吗?

    编辑:我不知道为什么我说是双精度的,它是浮动的。的S

    4 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

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

    第一个问题已经在弗雷德里克·盖瑟尔的演讲中提到了。 answer 通过使用飞重模式,这是内存问题。

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

    不过,要回答这个问题,实际上取决于您希望如何添加和访问数据。从中您可以决定哪个数据结构最适合您的任务。例如,您可能希望按照后进先出的顺序处理这些对象,那么堆栈将是最有效的方法。

        2
  •  2
  •   Frederik Gheysels    16 年前

    有机会使用 Flyweight pattern ?

    如果类型表示值类型,则可以使用结构。 结构的分配和解除分配成本更低。考虑到设计准则,如果满足以下条件,则可以使用结构:

    • 类型的实例大小小于16个字节。
    • 实例寿命很短
    • 实例是不可变的(所有值类型都应该是imho)。
        3
  •  1
  •   Trevor Tippins    16 年前

    我不太了解你在做什么,但是这些经验法则呢?

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

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

    如果要将点存储在数组中,那么只需使它们成为结构,因为这比使它们成为类更有效。

        4
  •  0
  •   Clifford    16 年前

    我怀疑结构和类之间有区别,当然不是C++,它们本质上是一样的。在现代桌面系统上,2米大小的物体并不是那么大。