我们在 WCF 服务(我们的业务\应用层)中使用 EF4.3.1。我们将 EF Code First 与现有数据库和 Fluent 映射 (EntityTypeConfiguraiton) 一起使用。为每个请求创建一个 DbContext 实例,然后将其丢弃。
我们有一个使用 DbContext 的通用存储库。
在测试服务器上运行时,我们发现业务层应用程序池在 30 分钟左右内存不足,同时有 10 个并发用户。我们对 IIS 工作进程进行了转储,发现 EF 正在消耗大量内存,EF 创建的大型对象堆中有很多对象。我们可以看到从堆上的数据库检索到的数据对象。不确定 DbContext 处置是否正在处理这个问题。GC 中的时间百分比非常高(> 16%)。我们在转储文件中注意到的一件奇怪的事情是,有一个巨大的字符串对象(大约 87MB)存储我所有映射文件的字符串表示形式。我发现这很奇怪,
有没有人遇到过 EF 的任何此类内存泄漏问题?如果我们在使用 EF 时出现问题,也请告诉我们。如果需要更多详细信息,请告诉我。
谢谢普拉萨德
编辑 我们使用 AutiFac DI(WCF 集成)注入 DbContext 实例。Dbcontext 的生命周期是 InstancePerLifeTime(每个 http 请求一个请求)。我们已经实现了这种方式来在一个 HTTP 请求中共享所有存储库实例中的 DbContext 实例。
我们访问数据库的方式是 // 声明 IGenericRepository UserRepository {get;set;} // 使用 AutoFac 进行属性注入
// 用法 var user = UserRepository.FindBy(u => u.userid == "test@test.com");
我们没有在存储库中使用显式事务。