Проблема в том, что Application_End, кажется, часто вызывается
пока я просматриваю свой веб-проект
Это происходит, когда AppDomain выгружается. Во время отладки это будет происходить каждый раз, когда вы перекомпилируете свой проект, что является нормальным явлением, потому что каждый раз, когда вы перекомпилируете сборку в папке bin
, происходит регенерация, а ASP.NET просто перезапускает домен приложения.
При развертывании приложения в IIS это будет происходить реже, только когда IIS решит перезапустить приложение. Это может произойти при других обстоятельствах: определенный период бездействия, пороги ЦП / памяти достигнуты, ...
Не должен Application_End вызываться только по окончании сеанса
или после определенного количества простоя?
Нет, Application_End
не имеет ничего общего с пользовательскими сессиями. Он вызывается в конце срока службы домена приложения.
Может кто-нибудь сказать мне, как я могу гарантировать, что Application_End
вызывается только тогда, когда я фактически закончу использовать приложение?
Это так: Application_End
вызывается средой выполнения ASP.NET, когда домен приложения готов к выгрузке.
Так что, если вы хотите избежать этого, вам следует использовать постоянную базу данных, а не хранилище в памяти. Если вы используете хранилище в памяти, вы привязаны ко времени жизни вашего приложения, которое, как вы уже заметили, может быть очень коротким.