【发布时间】:2013-11-15 12:43:18
【问题描述】:
我继承了一个 WinForms 项目并且遇到了一个奇怪的问题,我已将其缩小为 GC 问题。我根本看不出它怎么可能是其他任何东西,但请随时告诉我:-)
应用程序每隔几个月就会运行一次。我无法定期重现它,但它发生在我的客户身上几次,我在我的开发人员环境中看到过两次(但在我寻找它时从未见过)。
下面的代码简化了设置。
public class Main
{
Main()
{
var listOfB = new List<ObjB>();
var objB = new ObjB();
listOfB.Add(objB);
var objA = new ObjA(objB);
// Do alot of stuff with listOfB and different lists of objA-like-objects.
// Sometimes objA only exists as objects in a DataGrid
// listOfB exists for a long time, while objA comes and goes..
}
}
class ObjA
{
private bool _isBNull;
private ObjB _objB;
public ObjA(ObjB objB)
{
_objB = objB;
_isBNull = objB == null;
}
public ObjB ObjB
{
get
{
if (!_isBNull && _objB == null)
{
//
// This should NEVER happen, but happens anyway :-(
//
// Do some logging and now that we
// know it CAN happen anyway we throw up...
}
return _objB;
}
set
{
_isBNull = value == null;
_objB = value;
}
}
}
class ObjB
{
}
我们最终处于 objB 为空的应该不可能的情况,但我们的 debug-track-boolean 告诉我们它不应该是。
有没有人经历过这样的事情?关于做什么或去哪里看的任何建议?
项目是.Net 4.0,在32位XP和64位Windows 7客户端机器上都出现过这个错误。
Smøller - WinForm 新手
【问题讨论】:
标签: c# .net winforms garbage-collection