c# - Tibco 消息监听器 - 垃圾收集

标签 c# garbage-collection listener tibco-rv

我有一个奇怪的问题,让我们从一段代码开始:

foreach (var para in paras)
{
    var specificSubject = string.Format(subject, paras);
    _listener = new Listener(Queue.Default, transport, specificSubject, new object());
    _listener.MessageReceived += OnMessage;
}

如您所见,我创建了一个 Tibco Listener 对象,将其订阅到某个远程守护程序,然后将引用移至我创建的下一个 Tibco Listener 对象。

我希望垃圾收集器收集除最后一个之外的所有监听器对象,因为 _listener 引用了它。但是,运行结果表明所有监听器对象都在工作。

那么,为什么呢?这只是因为我运行应用程序的时间不够长,以至于 GC 没有时间收集监听器对象,或者是否存在一些引用“应该孤立”监听器对象的固有事物?

请赐教! 谢谢。

最佳答案

一般来说,您永远无法确定垃圾收集器何时运行,因此在没有任何其他数据的情况下,最可能的解释是您的第一个猜测,GC 尚未收集监听器。

我的 RV 文档(从版本 7.2 开始)指出

A listener object continues listening for messages until the program destroys it. The method Listener.Destroy destroys a listener explicitly, immediately canceling interest in messages. You can also destroy a listener implicitly by deleting all references to it, but the garbage collector might introduce a delay before it destroys the object and cancels interest.

(突出显示我的)。所以它证实了你的猜测。

关于c# - Tibco 消息监听器 - 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14236238/

相关文章:

c# - 通过静态变量从 native 代码访问有状态托管对象

c# - ASP.NET 核心 : AddEnvironmentVariables doesn't load variables

java - Jetty 服务器在没有任何请求的情况下挂起大型对象池

android - ListView 项目的自定义监听器

android - 微调器 : onItemSelected not called when selected item remains the same

c# - 运行 32/64 位 Web 应用程序

c# - 使用反射唯一标识方法或构造函数

java - 如何检测低堆情况以进行监控和警报?

tomcat - 如何找出 Tomcat 使用的 GC 策略?

javascript - 奇怪的 addEventListener 行为