我正在提高拥有200多个winForms的巨大HIS应用程序的速度和资源使用率,他们使用这样的entityContext:
private void someMethod()
{
var context = new entityContext();
var qry = context.someTable.Where(x=>x.condition);//bring thousands of records
...
... do some thing with result
...
//EOF method. here is problem :
/*
* is context will be free all the records that brings to ram
* in the end of method without using context.Dispose()?
* i think NO!
*/
}
有没有办法找到在表单中创建的所有entityContext对象并处理它们?
如果我在winForms中使用已关闭事件this.Dispose(true);
是否足以处置所有这些事件?
public class myForm : System.Windows.Forms.Form
{
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
/*
* TODO:
* find all entityContext objects and dispose them
*/
this.Dispose(true);
}
}
我没有时间编辑所有代码以包装entityContext
子句中的所有using{}
个对象,或手动添加context.Dispose()
给他们等等...
我正在寻找一种方法在OnClosed()
事件中处理所有这些可能吗?
答案 0 :(得分:0)
建议的方法是将所有context
个对象包装在using{}
子句中。这样,它们将在退出使用时自动处理。另外,规范是使用短期上下文对象。
据我所知,在.NET中(至少不容易)搜索DbContext
(或任何类型的)的所有实例的反射都是不可能的。即使有可能,反思也会影响你的表现。
将上下文对象作为存储库中的单例(如果已使用此模式)也可以帮助您处理它们,尤其是在您的存储库正在实现IDisposable
时。