我有一个奇怪的问题,让我们从一段代码开始:
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/