иногда получать исключения OutOfMemory из загруженного приложения .NET
Ответ на это слишком сложен, чтобы уместиться в ответе. См. « Настройка производительности приложений .NET » для полной обработки предмета.
Вот очень упрощенное (но все еще довольно хорошее) резюме Бруно Жухье :
Кроме того, среда выполнения .NET не позволяет использовать до 2 ГБ. Сборщик мусора работает путем копирования живых объектов, поэтому для его копирования требуется достаточно места.
Редактировать:
Вот моя попытка объяснения ...
Если вам интересно, каков максимальный размер памяти рабочего процесса (согласно отчету диспетчера задач) для рабочего процесса ASP.NET на x86, ответ «это зависит» .
В любом управляемом коде, таком как Java или .NET, программист отказывается от детального управления памятью в качестве наказания за то, что ему не приходится иметь дело с указателями. По мере выполнения программы сборщик мусора будет периодически очищать кучу и стек .
В частности, в отношении ASP.NET сборщик мусора работает внутри того же рабочего процесса, что и веб-сайт. GC потребляет собственную память. Как много памяти полностью зависит от того, как написан код вашего приложения. Одно приложение может использовать 1,8 ГБ памяти, а другое - 500 МБ. Чтобы понять почему , вам нужно профилировать ваше конкретное приложение.
Любой процесс в ОС x86 Windows ограничен 2 ГБ, если вы не установили параметр / 3gb в файле boot.ini, и в этом случае процесс может использовать 3 ГБ.
источник
Из этого поста «Рекомендации по настройке пула приложений SharePoint» :
Из моего опыта 800 МБ - порог для 32-битных машин (2-4 ГБ ОЗУ). Он перезагружает пулы приложений, прежде чем выбрасывать исключения «нехватки памяти».
источник
Убедитесь, что вы не устанавливаете размер виртуальной памяти в вашем пуле приложений. Если вы установите это значение в число вне допустимого диапазона, оно вернется к 512 МБ. См. KB923197 .
Также обратите внимание, что если вы работаете с приложением ASP.Net, ASP.Net перезапустит пул с 60% предела памяти 2 ГБ или 1,2 ГБ. Это не ваш сценарий ~ 500, но в 32-разрядных apppools с большим использованием памяти, мы иногда настраиваем это, чтобы получить немного больше памяти.
источник
В Windows 2003 вы можете установить расширение физического распределения (PAE), чтобы использовать всю память. Объем памяти по умолчанию для пула приложений IIS6 составляет 5 МБ .
источник