Это позволит вам использовать массивы типов значений вместо массивов объекта.

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

Ответы на вопрос(8)

Ваш ответ на вопрос