4

我有一个 Web 项目设置,它同时具有我的 WebForms 和 WCF 服务。我遇到了一个问题,我的应用程序似乎经常回收并且我丢失了所有单例对象和会话值。这似乎不是超时问题,但可能是某种内存泄漏。我们可以使用该应用程序一分钟左右,然后它就失去了一切。

我尝试监视目录的更改,但根本没有发现文件系统发生任何更改。我还在 Application_Error 中放置了一个断点,并且没有抛出任何错误。

我一直在谷歌搜索两天试图解决这个问题。该应用程序是以前运行良好的项目的直接复制。我注意到不同的一件事是我的最后一个项目我使用 nHibernate 作为后端,而这个项目我切换到使用 Linq to SQL。我注意到我没有正确处理 DataContext,因为我在我的服务调用中调暗了 DataContext 的实例并在将上下文设置为空之前返回了一个值,所以我认为它可能没有关闭。我尝试不将数据上下文存储在我的“存储库”类中,而是将其存储在操作上下文中,并在 Application_EndRequest 上显式处理它。那仍然没有解决问题。

有人有什么建议或我应该看的地方吗?

**更新**:我相信我发现了我的问题。我有使用 EntitySet 的对象,并且我正在使用可序列化的 IList 属性直接将这些对象序列化回来,并使用返回列表的 linq 查询。当我试图在返回数据之前显式处理我的数据上下文时,我现在遇到了序列化这些 EntitySet 的问题,因为数据上下文不再处于活动状态。我将尝试使用常规列表而不是 EntitySet 将数据复制到一个新的空白对象中,看看这是否能让我正确关闭我的数据上下文并解决我的问题。

4

2 回答 2

1

更新确实是一个不同的问题,但你真的不应该尝试序列化来自 ORM 的东西——很多潜在的噩梦。为自己构建一些 DTO。

于 2011-05-10T21:45:47.680 回答
0

在 IIS7 控制台中,选择特定的应用程序池,然后在左侧的操作窗格中选择“回收...”。它是一个向导,可让您定义应用程序池如何回收,以及如何将回收事件记录到事件日志(向导的第 2 页)。

于 2011-05-10T18:11:18.727 回答