【发布时间】: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