Принудительная сборка мусора массивов, C #

У меня есть проблема, когда пара трехмерных массивов выделяет огромный объем памяти, и программе иногда требуется заменить их на большие / меньшие и выдает исключение OutOfMemoryException.

Пример: имеется 5 выделенных массивов по 96 МБ (200x200x200, 12 байтов данных в каждой записи), и программе необходимо заменить их на 210x210x210 (111 МБ). Это делает это способом, подобным этому:

array1 = new Vector3[210,210,210];

Где array1-array5 - те же поля, которые использовались ранее. Это должно установить старые массивы в качестве кандидатов на сборку мусора, но, по-видимому, сборщик мусора не действует достаточно быстро и оставляет старые массивы выделенными до выделения новых - что вызывает OOM - тогда как если они освобождены до новых распределений, пространство должно быть довольно.

То, что я ищу, - это способ сделать что-то вроде этого:

GC.Collect(array1) // this would set the reference to null and free the memory
array1 = new Vector3[210,210,210];

Я не уверен, что полная сборка мусора будет хорошей идеей, поскольку этот код может (в некоторых ситуациях) выполняться довольно часто.

Есть ли правильный способ сделать это?

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

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