-1

我正在提高具有 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 Closed 事件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()这些可能吗?

4

1 回答 1

0

context推荐的方法是将所有对象包装在一个using{}子句中。这样,它们将在退出使用时自动处置。此外,规范是使用短暂的上下文对象。

DbContext据我所知,在 .NET 中(至少不容易)不可能通过反射搜索所有实例(或任何类型)。反思,即使这是可能的,也会损害你的表现。

将上下文对象作为存储库中的单例(如果已使用此模式)也可以帮助您处理它们,特别是如果您的存储库正在实现IDisposable.

于 2013-08-23T11:57:12.247 回答