backgroundWorker如何处理Finally块

时间:2015-11-18 06:51:34

标签: multithreading c#-4.0 backgroundworker dispose try-finally

在我的应用程序中,我使用BGW从数据库加载数据,并想知道我们是否需要明确处理BGW对象。这里是一些调用BGW的示例代码...

 try
            {
                bw = ReportRequestBackgroundWorker;
                bw.RunWorkerAsync();
            }
            finally
            {
                if (bw != null)
                    bw.Dispose();
            }

创建BGW的代码

    private BackgroundWorker ReportRequestBackgroundWorker
        {
            get
            {
                bw.DoWork += (o, e) =>
                {
                e.Result = wcfProxyObject.RequestData(InputsToFilterData); //wcfProxyObject is wcf proxy created as class level private field, used DI to insert dependency
                }
                 bw.RunWorkerCompleted += (o, e) =>
                {
                DisplayDataInUI(e.Result as DataSet);
                }
            }
        } 


private void DisplayDataInUI(DataSet ds)
{
    DataBind(ds);
}

  public void DataBind(object bindTo)
        {
            pivotGrid.DataSource = ds.Tables[0];
        }

每当新请求加载数据时,都会创建新的BGW实例。

因为加载数据后内存使用率非常高。我怀疑,我需要手动处理BGW对象,但无法理解什么是适合处理BGW的时间和地点。尝试最后块我已经添加了调用代码,我相信一旦BGW开始它的工作(最终不会等待BGW完成),最终将调用块。如果这不是放置bw.Dispose()的正确位置,那么正确的地方称之为“处置方法”。

我添加了一小段代码来计算来自数据库的数据大小,它大约为1GB但是当数据连接到网格时......内存消耗增加了2GB +。

我用GC.GetTotalMemory(false);

检查了这个

0 个答案:

没有答案