В свете этой статьи мне интересно, что люди испытывают при хранении массивных наборов данных (скажем,> 10 000 000 объектов) в памяти с использованием массивов для хранения полей данных вместо создания миллионов объектов и увеличения накладных расходов памяти (скажем, 12-24 байта на объект, в зависимости от того, какую статью вы читаете). Данные для каждого свойства варьируются от элемента к элементу, поэтому я не могу использовать строгий шаблон Flyweight, но могу представить себе нечто подобное.
Моя идея такого представления состоит в том, что у одного есть «объект шаблона» ...
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;
}
}
Итак, это простая стратегия, но не очень универсальная, например, нельзя создать подмножество (в виде списка) «Вещи» без дублирования данных и преодоление цели хранения поля массива. Мне не удалось найти хороших примеров, поэтому я был бы признателен либо за ссылки, либо за фрагменты кода лучших способов справиться с этим сценарием от того, кто это сделал ... или за лучшую идею.