Хорошо, так что в одном из моих проектов, я пытаюсь переделать способ хранения определенных переменных, у меня есть простой массив объектов. Класс, к которому относятся эти объекты:
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 отдельных массивах, которые кажутся , как если бы это было лучше для системы.
EDIT:
Проработав несколько разных способов сделать это, я обнаружил, что изменение
class Blocks
до
struct Blocks
Сделал мир различий, спасибо сообществу за этот приветственный совет для будущего использования, к сожалению, я не хотел просто добавлять два байта в структуру и вызывать это, вот где я остановился, чтобы проверить мой дизайн и обмотку с оригинальной проблемой. После добавления чего-либо еще в структуру (что-нибудь еще, что есть в моем списке, по крайней мере, означает ссылку на объект игрока или строку имени игрока). Это вызывает исключение нехватки памяти, что означает, что я не смогу использовать эту систему в конце концов.
Но знание того, как это сделать, будет весьма полезно в будущем. За это еще раз спасибо.