gpt4 book ai didi

c# - 使用数组字段而不是大量对象

转载 作者:IT王子 更新时间:2023-10-28 23:36:52 25 4
gpt4 key购买 nike

根据 this article ,我想知道人们在使用数组存储数据字段而不是实例化数百万个对象并增加内存开销(例如,每个对象 12-24 个字节,取决于您阅读的文章)。每个属性的数据因项目而异,因此我不能使用严格的享元模式,但会设想类似的东西。

我对这种表示的想法是有一个“模板对象”...

class Thing
{
double A;
double B;
int C;
string D;
}

然后是一个容器对象,它具有根据请求创建对象的方法...

class ContainerOfThings
{
double[] ContainerA;
double[] ContainerB;
int[] ContainerC;
string[] ContainerD;

ContainerOfThings(int total)
{
//create arrays
}

IThing GetThingAtPosition(int position)
{
IThing thing = new Thing(); //probably best done as a factory instead
thing.A = ContainerA[position];
thing.B = ContainerB[position];
thing.C = ContainerC[position];
thing.D = ContainerD[position];

return thing;
}
}

所以这是一个简单的策略,但不是很通用,例如,如果不复制数据并破坏数组字段存储的目的,就无法创建“事物”的子集(作为列表)。我一直无法找到好的示例,因此我希望能够提供链接或代码片段来提供更好的方法来处理这种情况……或者更好的想法。

最佳答案

这取决于您的具体情况。根据创建对象的频率,您可以:

  1. 如果对象是可序列化的,则将它们保存在 MemoryMappedFile 中(获得中/低性能和低内存消耗的某种融合)。

  2. 在不同对象之间映射字段:我的意思是,如果对象最初具有默认值,则将它们全部放在单独的基础中,如果该值与默认值不同,则真正分配一个新空间。 (这自然对引用类型有意义)。

  3. 另一个解决方案再次将对象保存到 SqlLite 基础。比 MemoryMappedFiles 更容易管理,因为您可以使用简单的 SQL。

选择取决于您的具体项目要求。

问候。

关于c# - 使用数组字段而不是大量对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com