【问题标题】:Possible to derive from an array?可以从数组派生吗?
【发布时间】:2015-05-10 04:07:53
【问题描述】:

目前我有一个包含数组和整数的类。

我有数百万个这样的对象,并且想通过只拥有一个数组来节省内存,因此我为每个对象节省了 12 个字节(不必为每个对象分配一个类包装器)。这将节省大量内存。

不幸的是,我还需要存储整数。我正在考虑将它存储在第一个索引中,但它有点混乱。我希望我可以从一个数组派生并在子类中插入 int 成员,但显然编译器不允许这样做。

还有其他选择吗?我想我可以从参考源框架中复制并粘贴数组类并添加我的属性,但这似乎有点矫枉过正。

【问题讨论】:

  • 不。使用组合而不是继承。如果你想要类似数组的语法,请实现一个索引器。
  • 组合的问题是一个对象是12个字节,所以一个有数组的对象是24个字节(因为数组也是引用类型),所以组合是我目前正在做的我想要一个替代方案来节省内存。
  • 我认为您不能只使用.Length,因为您的数组可能包含的元素少于声明的数组大小?
  • 对不起,你还是做不到。目前还不清楚为什么你有“数百万”个数组。对大局采取更深思熟虑的方法可能会解决这个问题。您可能还会发现您可以在一个数组中维护 int 值,并在另一个数组中引用数组本身,从而创建一个并行数据结构,其中对象由索引标识,而不是引用。无论如何,虽然 12 字节 * 数百万理论上是很多内存,但 "int + 数组" * 数百万也是如此。 IE。即使您为每个对象节省 12 个字节,您也已经遇到了内存问题。
  • 理所当然地认为使用类会为每个对象增加 12 个额外字节,1200 万字节只是 12 兆字节。我知道有些嵌入式系统的内存有限,但如果你真的因为额外的 12 MB 而开始达到内存限制,我会感到震惊。

标签: c# arrays inheritance memory memory-management


【解决方案1】:

您不能从数组派生(并且“从参考源框架复制和粘贴数组类”可能对您没有多大用处,因为数组非常集成到语言/框架中)。

一种选择可能是将struct 与整数和数组一起使用 - 处理struct 会很痛苦,但如果小心的话,它会为您提供您正在寻找的东西(如果您的“整数值”是可变或数组需要更改大小 - 我强烈建议您忘记您已看到此类建议)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2017-08-02
    相关资源
    最近更新 更多