Tibco消息侦听器 - 收集垃圾

时间:2013-01-09 13:25:27

标签: 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没有时间收集监听器对象,或者是否有一些固有的东西引用了“应该是孤立的”监听器对象?

请赐教! 感谢。

1 个答案:

答案 0 :(得分:2)

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

我的RV文档(来自版本7.2)声明

  

侦听器对象继续侦听消息,直到程序销毁它。 Listener.Destroy方法明确地销毁一个监听器,立即取消对消息的兴趣。您也可以通过删除对它的所有引用来隐式销毁侦听器,但垃圾收集器可能会在它破坏对象并取消兴趣之前引入延迟

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