这是一个非常基本的问题。我正在调试一些内存泄漏,并且完全感到困惑。假设我有以下内容:
public class ObjectData : IDataObject
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ObjectRepository<T> where T : IDataObject
{
private Dictionary<int, T> Objects;
public ObjectRepository()
{
Objects = new Dictionary<int, T>();
// load Data
}
public T GetDataObject(int id);
{
return Objects[id];
}
public Reset()
{
Objects = new Dictionary<int, T>();;
}
}
现在假设我有以下程序流程:
public Main()
{
var DataRepository = new ObjectRepository<ObjectData>();
// Constructor called and Data loaded
var myObject = DataRepository.GetDataObject(1);
DataRepository.Reset();
// Call manually the garbage collector or leave it
// Program flow continue after this
}
问题是,垃圾收集器会摆脱由构造函数最初创建的收集吗?还是不是因为程序流(myObject
)中仍引用了其中一个元素?
由于没有更多参考资料,它将被收集(最终)。在字典中获取对某物的引用不会给您对字典本身的任何引用!除非那个对象以某种方式在内部引用了字典,就是这样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句