【发布时间】:2014-04-29 01:10:56
【问题描述】:
大多数资源都表明垃圾收集器会根据引用自行计算出来,我不应该搞砸它。
我想知道是否可以明确告诉垃圾收集器它可能在释放对象的同时仍保留引用。
我想做的是告诉垃圾收集器我目前不再需要一个对象(但可能会再次),然后在稍后(如果)我再次需要该对象时我想检查如果它已经被处置。如果有,我只需重新创建它,如果没有,我想从垃圾收集中“取消标记”它,直到我再次完成它。
这可能吗?
我计划实现类似于Lazy<T> 类的东西。伪代码:
obj = new DisposeIfNecessary<LargeObject>(() => InitLargeObject());
obj.DoSomething(); // Initializes obj using InitLargeObject()
obj.DisposeIfNecessary(); // This is where the magic happens
... // obj might get disposed at some point
obj.DoAnotherThing(); // Might or might not call InitLargeObject() again
obj.Dispose(); // I will not need it again
【问题讨论】:
-
不是“大多数资源”,所有资源。 Dispose() 与垃圾收集无关。如果您处置了一个对象并且您想在之后使用它,那么您做错了。只是不要丢弃它。
标签: c# garbage-collection weak-references