1
这里后,实体框架内存泄漏是一个测试:分离新创建的对象
WeakReference ref1;
WeakReference ref2;
TestRepositoryEntitiesContainer context;
int i = 0;
using (context = GetContext<TestRepositoryEntitiesContainer>())
{
context.ObjectMaterialized += (o, s) => i++;
var item = context.SomeEntities.Where(e => e.SomePropertyToLookupOn == "some property").First();
context.Detach(item);
ref1 = new WeakReference(item);
var newItem = new SomeEntity {SomePropertyToLookupOn = "another value"};
context.SomeEntities.AddObject(newItem);
ref2 = new WeakReference(newItem);
context.SaveChanges();
context.SomeEntities.Detach(newItem);
newItem = null;
item = null;
}
context = null;
GC.Collect();
Assert.IsFalse(ref1.IsAlive);
Assert.IsFalse(ref2.IsAlive);
首先断言通过,第二次失败......我希望我失去了一些东西,它是晚...但看来,分离获取的项目实际上会释放该对象的所有句柄以使其被收集。但是,对于新的对象来说,某些东西会保持一个指针并且会产生内存泄漏。
NB - 这是EF 4.0
任何人之前看到过这个和解决它吗?
感谢您的帮助!
汤姆