4

我在一个项目中使用一个临时数据库,该项目位于Application_End

protected void Application_End() {
    if (_db != null) _db.Dispose();
}

问题是 Application_End 似乎在我浏览我的 Web 项目时经常被调用 - 似乎当我在数据库中编辑一个对象时,成功进行了更改,数据库被处理,并且当我被重定向到索引 - 已创建一个新数据库,并显示未更改的对象,就好像什么都没发生一样。

Application_End 不应该只在会话结束时或在一定量的空闲时间之后被调用吗?

谁能告诉我如何才能确保仅在我实际完成使用应用程序时才调用 Application_End ?

4

1 回答 1

11

问题是 Application_End 似乎在我浏览我的网络项目时被频繁调用

卸载 AppDomain 时会发生这种情况。在调试时,每次重新编译项目时都会发生这种情况,这是正常的,因为每次重新编译bin文件夹中的程序集时都会重新生成,而 ASP.NET 只会回收应用程序域。

当您在 IIS 中部署应用程序时,这种情况很少发生,只有在 IIS 决定回收应用程序时才会发生。它可能在不同的情况下发生:一段时间的不活动,达到 CPU/内存阈值,......

Application_End 不应该只在会话结束时或在一定量的空闲时间之后被调用吗?

不,Application_End与用户会话无关。它在应用程序域的生命周期结束时调用。

谁能告诉我如何才能确保仅在我实际完成使用应用程序时才调用 Application_End ?

情况就是这样:Application_End当应用程序域准备好卸载时,ASP.NET 运行时调用 。

因此,如果您想避免这种情况发生,您应该使用持久数据库而不是内存存储。如果您使用内存存储,那么您将与应用程序的生命周期相关联,正如您已经注意到的那样,它可能非常短。

于 2012-01-24T09:33:29.407 回答