Language agnostic 弱引用的其他用途?

Language agnostic 弱引用的其他用途?,language-agnostic,weak-references,Language Agnostic,Weak References,我知道弱引用是潜在大型数据集的一个很好的候选,并且只列出了“跟踪应用程序中引用的当前变量”和“弱引用的另一个用途是编写缓存”的语句 使用弱引用是一个好主意的其他一些情况(比“缓存结果”更具体)是什么 如果事件处理程序是短期实例对象的成员,则将该处理程序作为强引用传递给将持续更长时间的对象可能会不必要地使短期实例保持活动状态。我对一些事情使用弱引用 我喜欢在.Net中创建“弱事件”,以避免观察者长时间处于活动状态 在Python中,垃圾收集器使用引用计数来决定何时“销毁”或以其他方式取消分配对象。

我知道弱引用是潜在大型数据集的一个很好的候选,并且只列出了“跟踪应用程序中引用的当前变量”和“弱引用的另一个用途是编写缓存”的语句

使用弱引用是一个好主意的其他一些情况(比“缓存结果”更具体)是什么


如果事件处理程序是短期实例对象的成员,则将该处理程序作为强引用传递给将持续更长时间的对象可能会不必要地使短期实例保持活动状态。

我对一些事情使用弱引用

我喜欢在.Net中创建“弱事件”,以避免观察者长时间处于活动状态


在Python中,垃圾收集器使用引用计数来决定何时“销毁”或以其他方式取消分配对象。普通循环引用可能导致对象永远不会被垃圾收集,因为它们的引用计数分别保持在1或更高;但是,当弱引用超出范围时,将允许两个/所有对象都被正确清理。

弱引用的主要正确用法是识别其重要性来源于对它们的强引用的存在的事物。最常见的两种情况是:

  • 对象持有对某个对象的引用,不是因为它“关心”所讨论的对象,而是因为关心该对象的其他实体可能希望它对该对象做一些事情。如果过了一段时间,没有人再关心这个对象,那么其他实体就没有理由继续代表“关心它的所有实体”操纵它

  • 保存对同一个不可变对象的多个引用的内存成本可能比保存对多个相同对象的引用的内存成本低得多,比较对同一对象的引用可能比比较相同对象快得多。创建一个不可变对象、放弃它、收集它以及创建一个相同对象的内存成本基本上与创建一个对象并稍后返回对它的第二个引用的成本相同。返回对现有对象的引用(无论如何都必须保留)是一个巨大的胜利;返回对符合收集条件但尚未收集的对象的引用可能是一个胜利,也可能不是一个胜利(这通常是一个轻微的胜利,但在一代GC中,它有时会稍微影响性能);在许多情况下,后一种好处不足以证明让一个对象比其他情况下需要的时间更长


为什么这个社区是维基?这是一个严肃的问题!这是CW,因为没有一个正确的答案。