2010-07-29 4 views
2

Возможно ли восстановить память, потерянную из w3wp.exe? Я думал, что session.abandon() должен прояснить такие ресурсы? Дело в том, что у меня есть веб-приложение, некоторые страницы значительно увеличивают w3wp.exe. Как от 40 МБ до 400 МБ. Теперь я собираюсь оптимизировать мой код вызывающе, чтобы уменьшить это, однако, для чего когда-либо возрастает w3wp.exe, нет ли способа восстановить потерянную память, даже когда пользователь вышел из системы и закрыл браузер?Восстановление памяти из w3wp.exe

Я знаю, что этот рабочий процесс будет перерабатываться через 30 минут (по умолчанию) использования в режиме ожидания, но что, если в течение длительного времени нет продолжительности использования в режиме ожидания, а рабочий процесс все еще имеет эту часть памяти, он просто продолжает растет? Любые мысли люди?

+0

Вы видите, что объем памяти службы растет, когда вы начинаете новый сеанс после закрытия старого? – Achilles

+0

Да. Мой w3wp.exe отправляется на 400MB на определенную страницу, даже после выхода пользователя из системы (session.abandon()), появляется следующий пользователь, посещает эту страницу и poof w3wp.exe переходит на 700Mb. – xeshu

+0

Кажется, вы вкладываете в сессию огромное количество данных. Вместо этого используйте файл или базу данных для хранения больших объемов данных. –

ответ

0

Сборщик мусора позаботится о том, какая память должна быть освобождена при условии, что вы правильно распоряжаетесь и т. Д. GC не сразу бросается в глаза каждый раз, когда вы вызываете Session.Abandon(), поскольку это будет большой успех.

При этом каждое приложение имеет «обычное» использование памяти, то есть стабильное использование памяти (опять же, если у вас нет утечек), и эта цифра различна для каждого приложения. 400MB может быть много, или это может быть ничего, в зависимости от того, что делает ваше приложение. У меня есть приложения, которые колеблются около 400 МБ, а другие около 1,5 ГБ, и это нормально, пока использование памяти стабилизируется где-то. Если вы видите неограниченное использование памяти, скорее всего, у вас есть утечка где-то в вашем приложении.

Хранение большого количества данных в сеансе in-proc также может быстро увеличить использование памяти. Вместо этого используйте файл или базу данных для хранения этих данных.

+0

Ну, в принципе, я вообще не распоряжаюсь объектами. Я думал, что «использование» части C# должно заботиться о том, чтобы распоряжаться бизнесом? И да, мое производственное развертывание не выполняет session.abandon(). Я просто понял, что и буду использовать это в коде, но это может быть не очень полезно, так как 99,9% пользователей не беспокоятся о нажатии кнопки выхода из системы, они просто закрывают браузер. – xeshu

0

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

+0

hmmm re-use, теперь это интересная концепция ... – xeshu

Смежные вопросы