我在Application_End
上的项目中使用临时数据库:
protected void Application_End() {
if (_db != null) _db.Dispose();
}
问题是Application_End似乎经常在我浏览我的web项目时被调用 - 似乎当我在db中编辑一个对象时,更改成功,数据库被处理,到时候我重定向到索引 - 已创建一个新的数据库并显示未更改的对象,就好像什么都没发生一样。
当会话结束或经过一定的空闲时间后,不应该只调用Application_End吗?
有人能告诉我如何才能确保只在我实际使用该应用程序时才调用Application_End吗?
答案 0 :(得分:11)
问题是Application_End似乎经常被调用 我正在浏览我的网络项目
卸载AppDomain时会发生这种情况。在您进行调试时,每次重新编译项目时都会发生这种情况,这是正常的,因为每次重新编译bin
文件夹中的程序集时都会重新生成,ASP.NET只会回收应用程序域。
在IIS中部署应用程序时,只有当IIS决定回收应用程序时,才会发生这种情况。它可能发生在不同的情况下:一段时间不活动,达到CPU /内存阈值,......
不应该在会话结束时调用Application_End 或者经过一定的闲置时间后?
不,Application_End
与用户会话无关。它在应用程序域的生命周期结束时调用。
有人能告诉我如何确保Application_End 只有在我实际使用完应用程序时才会调用它?
情况就是这样:当应用程序域准备好卸载时,ASP.NET运行时调用Application_End
。
因此,如果您想避免这种情况发生,您应该使用持久数据库而不是内存存储。如果您使用内存存储,那么您将与应用程序的生命周期联系起来,因为您已经注意到它可能非常短。