Как перехватить исключение OutOfMemoryException в .NET (надстройка Excel)

StackOverflow https://stackoverflow.com/questions/776080

  •  13-09-2019
  •  | 
  •  

Вопрос

Я получаю исключение OutOfMemory в своей надстройке .net.Надстройка использует большое количество управляемых и неуправляемых объектов.Есть ли способ перехватить это исключение?

Обновлено:Я думаю, что любое приложение может получить исключение OutofMemory, если оно обрабатывает большой объем данных, которые необходимо периодически обрабатывать, а не освобождать.Предположим, у меня есть метод, который анализирует некоторые структуры в памяти.Я даю ему 300 структур, он загружает каждую из них в память, анализирует и завершает обработку.В этой операции использование памяти составило X.Теперь, если я дам ему для обработки 3000 структур, он проанализирует эти 3000 в памяти, и использование памяти увеличится в 10 раз.

Обновлено

Эта проблема наблюдается только в Excel 2007, а не в Excel 2003, поэтому я попросил сотрудников MSDN разобраться в ней.

Это было полезно?

Решение

В .Net исключение OutOfMemoryException генерируется средой выполнения, когда она не может выделить запрошенную память для вашего приложения.Таким образом, для обработки такого исключения можно выполнить очень мало реальной работы.

Вместо того, чтобы ловить это, вы должны в первую очередь предотвратить это.Игнорирование исключения не устранит проблему.

Другие советы

Если вы получаете исключение OutOfMemoryException, ваша программа умерла, прекратила свое существование, ушла, ее больше нет и она отправилась навстречу своему создателю.

А если серьезно, он не может восстановить часть памяти, которая у него закончилась, поэтому вы ничего не можете сделать.

Это может быть сборщик мусора.Попробуйте периодически принудительно собирать данные.

Если не помогло, прочитайте это: http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top