У меня проблема, когда пара 3-мерных массивов выделяет огромное количество памяти, и программе иногда требуется заменить их более крупными/меньшими и выдает исключение OutOfMemoryException.
Пример: имеется 5 выделенных 96 МБ массивов (200x200x200, 12 байтов данных в каждой записи), и программа должна заменить их 210x210x210 (111MB). Он делает это так же, как это:
array1 = new Vector3[210,210,210];
Где array1-array5 - те же самые поля, которые использовались ранее. Это должно ставить старые массивы в качестве кандидатов на сбор мусора, но, похоже, GC не действует достаточно быстро и оставляет старые массивы выделенными до выделения новых, что приводит к OOM, тогда как если они освобождают до новых распределений, то пространство должно быть достаточно.
То, что я ищу, - это способ сделать что-то вроде этого:
GC.Collect(array1) // this would set the reference to null and free the memory
array1 = new Vector3[210,210,210];
Я не уверен, что полная сборка мусора будет хорошей идеей, поскольку этот код может (в некоторых ситуациях) выполнять довольно часто.
Есть ли правильный способ сделать это?