У меня есть приложение, которое довольно жадно до памяти. Он содержит большой объем данных в некоторых больших массивах.
Недавно я заметил случайное исключение OutOfMemoryException. Эти OutOfMemoryExceptions возникают задолго до того, как мое приложение (ASP.Net) израсходовало 800 МБ, доступных для него.
Я проследил проблему до области кода, где размер массива изменен. Массив содержит структуру размером 74 байта. (Я знаю, что вы не должны создавать структуры, размер которых превышает 16 байт), но это приложение является портом из приложения Vb6). Я попытался изменить структуру на класс, и это, похоже, решило проблему на данный момент.
Я думаю, что причина, по которой переход на класс решает проблему, связана с тем фактом, что при использовании структуры и изменении размера массива необходимо зарезервировать сегмент памяти, достаточно большой для хранения нового массива ( например (currentArraySize + увеличенияBySize) * 74) не может быть найден. Это приводит к исключению OutOfMemoryException.
Это не относится к классу, поскольку каждому элементу массива требуется только 8 байтов для хранения указателя на новый объект.
Правильно ли мое мышление здесь?