在我的应用程序中,我使用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);
检查了这个