Tibco消息监听器-垃圾收集

本文关键字:消息 监听器 Tibco | 更新日期: 2023-09-27 17:51:15

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

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

请开导我!谢谢。

Tibco消息监听器-垃圾收集

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

我的RV文档(从7.2版开始)声明

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

(我强调)。所以它证实了你的猜测