Это позволит вам использовать массивы типов значений вместо массивов объекта.
теэта статьяМне интересно, как люди воспринимают массивные наборы данных (скажем,> 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;
}
}
Так что это простая стратегия, но не очень универсальная, например, нельзя создать подмножество (в виде списка) «Thing» без дублирования данных и отказа от цели хранения полей массива. Я не смог найти хороших примеров, поэтому я был бы признателен за ссылки или фрагменты кода, которые могли бы помочь лучше справиться с этим сценарием от кого-то, кто это сделал ... или за лучшую идею.