Массивы занимают место даже без значений в них .net? - PullRequest
1 голос
/ 28 сентября 2011

У меня есть программа на VB.net, которая использует трехмерный массив:

Private gridList(10, 900, 900) As GridElement

Теперь я просто использовал на ней профилировщик памяти (потому что у моего приложения есть серьезные проблемы с утечками или что-то в этом роде) ипо-видимому, этот массив (содержащий на момент тестирования 0-30 элементов одновременно) использует 94% памяти, используемой в настоящее время моим приложением.Даже если он пуст, он занимает огромное количество памяти.

Мое единственное предположение, что даже пустые массивы занимают место!Это наносит серьезный удар по моим планам!

Мой вопрос:

Есть ли альтернатива этому, которая позволяет мне сохранять те же способности, что и I?Вы использовали это так:

Dim cGE as GridElement = gridList(3, 5, 7)

, но не слишком много памяти для вещей, которые не используют память?

Спасибо!

1 Ответ

1 голос
/ 28 сентября 2011

Массивы занимают место даже без значений в них .net?

Нет.Но ваш массив содержит значений.И, следовательно, занимает место.

Чтобы избежать сохранения большого количества элементов в памяти, когда вы получаете доступ только к нескольким из всех возможных элементов, вам нужно использовать так называемый разреженный массив .В .NET это проще всего реализовать через Dictionary, где ключ в вашем случае будет трехэлементной структурой *, а значение будет GridElement.


* Есливы используете последнюю версию .NET, затем вы можете смоделировать это с помощью Tuple(Of Integer, Integer, Integer)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...