По умолчанию IIS автоматически перезагружает пул приложений с интервалом (я думаю, что это около 29 часов или около того), но это, безусловно, устанавливается хостом, независимо от того, насколько мало или сколько памяти вы используете для процесса. Триггер перезапуска может быть временным интервалом или когда процесс достигает определенного предела использования памяти. Я уверен, что на любом общем хосте установлены оба.
Что касается использования памяти, вы можете использовать метод GC.GetTotalMemory, который даст вам приблизительное использование. Даже при использовании Perfmon показания не очень точны, но дают представление.
//global.asax.cs
void Application_EndRequest(object o,EventArgs a)
{
var ctype=Context.Response.Headers["Content-Type"];
if (ctype == null || !ctype.Contains("text/html")) return;
Context.Response.Write(string.format("<p>Memory usage: {0}</p>",GC.GetTotalMemory(false)));
}
Имейте в виду, что вы увидите, что использование будет увеличиваться до тех пор, пока не начнет работать GC, и использование снизится до более «реалистичного» значения.
Если у вас есть деньги, я рекомендую специализированный инструмент, такой как Профилировщик памяти
Другие вещи, которые вы можете сделать, чтобы хотя бы быть готовыми, если у приложения есть проблемы с памятью или производительностью:
- Правильное наложение приложений означает, что вы можете реорганизовать более неэффективные части, не затрагивая другие.
- Шаблон репозитория будет очень полезен, потому что вы можете начать использовать EF, выяснить, что EF использует много памяти (как в ссылке, которую вы нашли), но затем вы можете переключить реализацию репозитория на использование PetaPoco или Dapper. .net.
- В общем случае OR \ M - это более тяжелая библиотека, если приложению не нужны функции ORM, а просто быстрый способ работы с БД, используйте с самого начала микроорму, подобную упомянутой выше.
- Всегда располагайте объекты, реализующие IDisposable.
- При работе с большими записями БД используйте нумерацию страниц. Это хорошо как для использования ресурсов сервера, так и для взаимодействия с пользователем
- Примените принцип YAGNI (вы не нуждаетесь в этом) насколько это возможно, это как-то подразумевает немного TDD:)