sando campos de matriz em vez de um grande número de objet

À luz deEste artig, Estou imaginando quais são as experiências das pessoas com o armazenamento de conjuntos de dados maciços (por exemplo,> 10.000.000 de objetos) na memória usando matrizes para armazenar campos de dados em vez de instanciar milhões de objetos e acumular sobrecarga de memória (por exemplo, 12 a 24 bytes por objeto) , dependendo do artigo que você leu). Os dados por propriedade variam de item para item, portanto não posso usar um padrão Flyweight rigoroso, mas imaginaria algo semelhante.

Minha idéia desse tipo de representação é que se tem um 'objeto de modelo' ...

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

E, em seguida, um objeto contêiner com um método de criação de um objeto sob solicitação ...

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;
  }
}

Então é uma estratégia simples, mas não muito versátil, por exemplo, não se pode criar um subconjunto (como uma Lista) de 'Coisa' sem duplicar os dados e derrotar o objetivo do armazenamento em campo da matriz. Como não consegui encontrar bons exemplos, gostaria de receber links ou trechos de código de maneiras melhores de lidar com esse cenário de alguém que o fez ... ou de uma idéia melho

questionAnswers(8)

yourAnswerToTheQuestion