что объясняет огромное увеличение размера О_О

в одном из моих проектов, я пытаюсь переделать способ хранения определенных переменных, у меня есть простой массив объектов. Класс, к которому относятся эти объекты:

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

Я планирую добавить к нему больше, в текущем типе класса используется текущее значение объекта, а в последнем блоке используется объект.

я создаю массив следующим образом:

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

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

Проблема, с которой я сталкиваюсь, заключается в том, что когда я создаю очень большой массив (512,512,512 или 134217728 для тех из вас, кто не любит математику), массив становится огромным, до 3,5 гигабайт.

Старый способ создания этого массива был немного проще, но гораздо сложнее его расширить, он просто создал массив байтов, представляющих текущий блок, и, кажется, использует только 2 мегабайта оперативной памяти, когда он действительно загружен (что я не получаю, поскольку 134217728 байт должно быть около 134 мегабайт ... верно?). Это просто сбивает с толку, что ссылки на объекты могут генерировать гораздо больше оперативной памяти.

Я делаю что-то не так, или я должен просто вернуться к старому, как это было сделано? Я хотел бы, чтобы ссылки на объекты просто потому, что это означает, что все мои переменные находятся в 1 массиве, а не в 4 отдельных массивах, которыекажется как будто это было бы лучше для системы.

РЕДАКТИРОВАТЬ:

Проработав несколько разных способов сделать это, я обнаружил, что изменение

class Blocks

в

struct Blocks

Сделал мир различий, спасибо сообществу за этот приветственный совет для будущего использования, к сожалению, я не хотел просто добавлять два байта в структуру и вызывать это, вот где я остановился, чтобы протестировать свой дизайн и завелся с оригинальная проблема. После добавления чего-либо еще в структуру (что-нибудь еще, по крайней мере, есть в моем списке, что означает либо ссылку на объект проигрывателя, либо строку имени игрока.) Это вызывает исключение нехватки памяти, что означает, что я не собираюсь быть в состоянии использовать эту систему в конце концов.

Но знание того, как это сделать, будет весьма полезным в будущем. За это еще раз спасибо.

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

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