C # matriz de objetos, muy grande, buscando una mejor manera

Ok, en uno de mis proyectos, estoy tratando de rehacer la forma en que almacena ciertas variables, tengo una simple matriz de objetos. La clase a la que se refieren estos objetos es:

class Blocks
{
    public byte type = Block.Empty;
    byte lastblock = Block.Zero;
}

laneo agregarle más, en el tipo de clase actual es el valor actual de los objetos, y lastblock es lo que solía ser el objeto.

i creo la matriz así:

blocks = new Blocks[width * depth * length];

for (int i = 0; i < ((width * length) * depth); i++)
{
    blocks[i] = new Blocks();
}

l problema que tengo es que cuando creo una matriz que es muy grande (512,512,512 o 134217728 para aquellos de ustedes a quienes no les gustan las matemáticas), la matriz se vuelve enorme, más de 3.5 gigas.

La antigua forma en que se creó esta matriz fue un poco más simple, pero mucho más difícil de expandir, simplemente creó una matriz de bytes que representa el bloque actual, y parece que solo usa 2 megas de ram cuando está realmente cargada (que no obtengo desde 134217728 bytes debería ser alrededor de 134 megas ... ¿verdad?). Simplemente me desconcierta que las referencias a objetos puedan generar mucho más uso de memoria ram.

¿Estoy haciendo algo mal, o debería volver a la forma antigua en que se hizo? Me gustaría que las referencias a objetos simplemente porque significa que todas mis variables están en 1 matriz en lugar de en 4 matrices separadas, que parece como si fuera mejor para el sistema.

EDITAR

Después de trabajar con diferentes maneras de hacerlo, descubrí que cambiar

class Blocks

struct Blocks

Hizo un mundo de diferencia, gracias comunidad por ese consejo de bienvenida para uso futuro, desafortunadamente no quería agregar dos bytes en una estructura y llamarlo hecho, ahí fue donde me detuve para probar mi diseño y terminé con El problema original. Después de agregar cualquier otra cosa a la estructura (cualquier otra cosa que esté en mi lista al menos, lo que significa una referencia de objeto de jugador o una cadena de nombre de jugador). Causa una excepción de falta de memoria que significa que no voy a ser capaz de usar este sistema después de todo.

Pero el conocimiento de cómo hacerlo será muy útil en el futuro. Por eso, gracias de nuevo.

Respuestas a la pregunta(6)

Su respuesta a la pregunta