问题标签 [weak-references]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
878 浏览

c# - 在 WCF 中使用弱引用进行简单数据缓存

鉴于我有以下 WCF 服务:

使用弱引用(或任何其他方法)缓存州县的最有效(或最佳)方法是什么,这样我们就不会在每次需要查找数据时都访问数据库。

请注意,我们将无法访问 HttpRuntime(和 HttpContext)。

0 投票
3 回答
7789 浏览

java - 对包含嵌套强引用的对象的弱引用和垃圾回收

假设我有一个对引擎有普通(强)引用的汽车的弱引用。不存在对汽车或发动机的其他参考。引擎可以被垃圾收集吗?

0 投票
1 回答
2791 浏览

actionscript-3 - AS3:初始化期间不合适的弱侦听器引用?

据我目前了解,如果将事件侦听器添加到 useWeakReference 设置为 true 的对象,则它有资格进行垃圾收集,并且在垃圾收集进行扫描时将被删除。

在这种情况下,是否不适合使用弱引用事件侦听器初始化对象,以防垃圾收集器确实激活清除对象事件侦听器,因为它们是在对象初始化期间添加的?

在这种情况下,是否只适合创建一种 deallocate() 方法,该方法在对象无效之前删除事件侦听器?

0 投票
5 回答
928 浏览

garbage-collection - 垃圾收集器如何决定何时杀死 WeakReferences 持有的对象?

我有一个对象,我相信它仅由 WeakReference 持有。我已经使用 SOS 和 SOSEX 追踪了它的参考持有人,并且两者都确认是这种情况(我不是 SOS 专家,所以我在这一点上可能是错误的)。

WeakReferences 的标准解释是 GC 在扫描时会忽略它们。尽管如此,我的对象在调用 GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) 后仍然存在。

仅使用 Wea​​kReference 引用的对象是否有可能在该集合中存在?有没有更彻底的收藏可以强制?或者,我是否应该重新审视我的信念,即对对象的唯一引用是弱的?

更新和结论

根本原因是堆栈上有一个锁定对象的引用。目前尚不清楚为什么 SOS 和 SOSEX 都没有显示该参考。用户错误总是有可能的。

在诊断根本原因的过程中,我确实做了几个实验,证明对第二代对象的弱引用可以持续很长时间。但是,WRd 2nd gen 对象将无法在 GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) 中存活。

0 投票
2 回答
243 浏览

.net - 复杂对象图中 IDisposable 非托管资源的终身问题?

这个问题是关于处理非托管资源(COM 互操作)并确保不会有任何资源泄漏。对于我是否似乎以正确的方式做事的反馈,我将不胜感激。

背景:


假设我有两个课程:

  • 一个类LimitedComResource,它是 COM 对象的包装器(通过某些 API 接收)。这些 COM 对象的数量有限,因此我的类实现了IDisposable接口,该接口将负责在不再需要 COM 对象时释放它。

  • 临时创建另一种类型ManagedObject的对象以在LimitedComResource. 他们不是IDisposable

用图表总结以上内容,我的类可能如下所示:

(稍后我将提供这两个类的示例代码。)

问题:


由于我的临时ManagedObject物品不是一次性的,我显然无法控制它们会存在多长时间。但是,与此同时,我可能会知道 a所指的Disposed 。我如何确保 a不会访问不再存在的 a?LimitedComObjectManagedObjectManagedObjectLimitedComResource

我目前已经通过混合弱引用和一个标志来实现这一点,该标志LimitedResource表明一个对象是否已经被释放。有没有更好的办法?

示例代码(我目前拥有的):


LimitedComResource

ManagedObject

0 投票
3 回答
2117 浏览

c# - 如果本地(但未使用)变量是对对象的唯一强引用,那么符合标准的 C# 编译器能否优化掉它?

另请参阅这些相关资源:


换句话说:

是否可以在变量超出范围之前回收由局部变量引用的对象(例如,因为分配了变量,但随后不再使用),或者该对象是否保证在变量超出范围之前没有资格进行垃圾回收范围?

让我解释:


object在这个代码示例中,我显然必须计划新的被垃圾收集器回收的可能性;因此if声明。

(请注意,我使用weakRef它的唯一目的是检查新版本object是否仍然存在。)


与前一个代码示例相比,此代码示例的主要变化是 new'edobject被局部变量 ( unusedLocalVar) 强引用。weakRef但是,在创建弱引用 ( )后,该变量将不再使用。


问题:是否允许符合标准的 C# 编译器将 的前两行优化为仅在一个地方使用的Case_2那些,即作为构造函数的参数?即有没有可能断言 in可能会失败?Case_1unusedLocalVarWeakReferenceCase_2

0 投票
7 回答
16361 浏览

.net - .Net中弱字典的良好实现

我在哪里可以找到IDictionary内部使用弱引用的良好实现?

字典应该只持有对值的弱引用,并最终清除自己的死引用。

还是我应该自己写?

0 投票
4 回答
10488 浏览

.net - 有没有办法在 CLR 中执行 WeakList 或 WeakCollection(如 WeakReference)?

使用 aList<WeakReference>将无法按我的意愿工作。我想要的是,每当 WeakReferences 引用的对象被垃圾收集时,它们就会自动从列表中删除。

ConditionalWeakTable<TKey,TValue>我也不满意,因为虽然它的键和值是弱引用和可收集的,但你不能枚举它们!

0 投票
1 回答
929 浏览

c# - 在 C# 中使用弱引用的 GC 成本?

另一个问题中,斯蒂芬 C说:

第二个问题是使用弱引用会产生运行时开销。明显的成本是创建弱引用并调用 get 的成本。一个不太明显的成本是每次 GC 运行时都需要做大量的额外工作。

那么弱 ref 的 GC 成本到底是多少?它需要做哪些额外的工作,有多大的交易?我可以做出一些有根据的猜测,但对实际的机制很感兴趣。

0 投票
4 回答
3880 浏览

c# - 弱引用和一次性对象

在 C# 中,可以创建对对象的弱引用,如下所述:

弱引用类

在 .net 中,一些类还实现了 IDisposable 接口。调用此接口的 Dispose 方法可手动释放当前持有的任何托管或非托管资源。一个示例可能是 Bitmap 对象或类。

如果我将实现 IDisposable 的对象分配给弱引用,如果弱引用收集对象,会调用 Dispose 吗?