У меня особая проблема, когда IIS7 решил загрузить большой объем памяти для небольшой веб-страницы. на каждый запрос он добавляет от 2 до 20 МБ памяти в процесс, и я, как и я, не могу понять, почему. Я тщательно искал утечки памяти, но я просто не могу найти, где это происходит. Есть ли у кого-нибудь предложения относительно того, что я могу сделать, чтобы изолировать проблему?
Найти источник памяти непросто, если вы не знаете, как это сделать. (И я нет...)
Вы можете попытаться узнать, какой код вызывает это:
Вы, вероятно, захотите прочитать: Настройка параметров повторного использования для пула приложений (IIS 7).
И в вашем случае: Повторное использование при достижении лимита запросов.
Что вам нужно, так это профилировщик памяти. Хороший профилировщик памяти, который проверяет ваш .NET-код, укажет вам на объекты и места в коде, где они выделены и занимают больше всего памяти. Без такого инструмента очень трудно или даже невозможно определить реальную проблему (подумайте о часах или днях, а не о неделях).
Вы можете сказать, что все соединения с базой данных закрыты и удалены, но так ли это на самом деле? Вы используете оператор using для всех одноразовых объектов (любой объект, реализующий IDisposable, может вызывать утечку ресурсов, включая память)? Существуют инструменты проверки кода, которые могут помочь вам проанализировать код за вас (подумайте о ReSharper).
Некоторые профилировщики:
Если я хорошо помню, я получил наилучшие результаты с помощью YourKit (он дает наименьшие накладные расходы, но все равно значительный на живых серверах). Для .NET существует множество других профилировщиков памяти и производительности.
Вы пробовали использовать какие-либо профилировщики памяти .NET? Это может быть менее болезненно, чем использование WinDBG для отслеживания того, для чего выделяется память.