首页 新闻 会员 周边

Entity Framework中的内存泄漏问题

0
悬赏园豆:50 [已关闭问题] 关闭于 2011-10-11 14:19

最近发现在entity framework中出现内存泄漏的问题。实体对象总是包含着ObjectContext的引用,即便在ObjectContext已经被Dispose的情况下。


通常我们都会使用“using”语句或者手动调用obj.dispose()来销毁ObjectContext。我希望在销毁该对象后,对应的内存空间会被回收。但实际我通过.net memory profiler查看内存对象的时候发现ObjectContext并没有被回收,上面提示“对象已经销毁但没有被垃圾回收”。原因是我需要将实体对象“user”存在session中(在session的有效期内,user对象不会被回收),而"user"包含了对"ObjectContext"的引用。

 

Users user = null;
using (B2CEntities context = new B2CEntities())
{
  user = context.Users.First(); 
}
Session.Add(user.OID.ToString(), user);

 

user对象查出来后默认的状态是“Unchanged”,我发现如果手动调用context.detach(user), user的状态变为“Detached”,就不会引用context,也就不会产生内存泄漏的问题。然而这样会产生另外一个问题,detach后user中所有导航属性都会变成“Unload”。无疑这不是可行的方法。

不清楚这是否entity framework的Bug,各位大牛有何建议?


在msdn上也发了贴,请参考这里http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/eace1b85-a15b-48cc-aaa4-17cf85f1111c

Teddy Li的主页 Teddy Li | 初学一级 | 园豆:177
提问于:2011-04-29 18:06
< >
分享
所有回答(1)
0

Entity Framework的版本是多少?Users是POCO吗?

 

dudu | 园豆:31003 (高人七级) | 2011-04-29 18:34
4.0, 没有用POCO
支持(0) 反对(0) Teddy Li | 园豆:177 (初学一级) | 2011-05-03 09:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册