olo*_*tus 6 .net c# garbage-collection reference
我一直在阅读Rockford Lhotka的"Expert C#2008 Business Objects",其中有一个数据门户网站可以很好地抽象出数据的来源.当使用DataPortal.Update(this)时,正如您可能猜测的那样,将"this"持久存储到数据库中,将返回一个对象 - 持久化的"this"以及db对其所做的任何更改,例如.时间戳.
Lhotka经常写得非常随意,你必须确保将对旧对象的所有引用更新为新返回的对象.有道理,但有没有一种简单的方法来查找旧对象的所有引用并更改它们?GC显然跟踪参考文献,是否可以利用它?
干杯
有分析API可以做到这一点,但没有一般消费.一种可能的解决方案和我自己使用的解决方案是在基类中实现一种跟踪机制,其中对象的每个实例都将WeakReference添加到静态集合中.
我有条件地为DEBUG构建编译,但在发布版本中依赖它可能不是一个好主意.
// simplified example
// do not use. performance would suck
abstract class MyCommonBaseClass {
static readonly List<WeakReference> instances = new List<WeakReference>();
protected MyCommonBaseClass() {
lock (instances) {
RemoveDeadOnes();
instances.Add(new WeakReference(this));
}
}
}
Run Code Online (Sandbox Code Playgroud)
GC 实际上并不跟踪对象的引用。相反,它在运行时从全局对象和堆栈对象开始计算哪些对象是可访问的,并执行“洪水填充”算法的某些变体。
针对您的问题,为什么不只拥有一个代理来保存对“真实”对象的引用呢?这样您只需在一处进行更新。
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |