Использование полей массива вместо огромного количества объектов

В свете этой статьи мне интересно, что люди испытывают при хранении массивных наборов данных (скажем,> 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;
  }
}

Итак, это простая стратегия, но не очень универсальная, например, нельзя создать подмножество (в виде списка) «Вещи» без дублирования данных и преодоление цели хранения поля массива. Мне не удалось найти хороших примеров, поэтому я был бы признателен либо за ссылки, либо за фрагменты кода лучших способов справиться с этим сценарием от того, кто это сделал ... или за лучшую идею.

7
задан WolfOdrade 10 July 2011 в 06:19
поделиться