我们试图阻止的程序中存在内存泄漏。
我们已经隔离了表单,这个表单有几个BindingList属性。
目前,这些属性采用以下格式编写:
private BindingList<DataModel1> _dataModel1List;
public BindingList<DataModel1> DataModel1List
{
get
{
var temp = from r in dbo_datamodel1 orderby r.label select r;
_dataModel1List= ((IListSource)temp).GetList() as BindingList<DataModel1>;
return _dataModel1List;
}
set
{
_dataModel1List= value;
}
}
我不是BindingList课程的专家,但在我看来,每次调用时我们都会得到一组新的数据。
此外,如果我们使用 getter 获取数据,然后使用 setter 进行设置,看起来我们将覆盖之前使用 getter 传入value
。
这可能是我们内存泄漏的根源吗?我在这一个表单上计算了这些BindingList属性中的52个。
如果我要像下面那样重写它,是否会修复内存泄漏或导致BindingList出现问题?我特别关注 setter 中的 Clear()调用。
private BindingList<DataModel1> _dataModel1List;
public BindingList<DataModel1> DataModel1List
{
get
{
if (_dataModel1List== null)
{
_dataModel1List= new BindingList<DataModel1>(
(from r in dbo_datamodel1
orderby r.name
select r).ToList());
}
return _dataModel1List;
}
set
{
if (_dataModel1List!= null)
{
_dataModel1List.Clear();
}
_dataModel1List= value;
}
}
由于有很多这些属性可能导致内存泄漏,我想确保在我完全进行此更改之前不会导致问题。