我需要自己清理NLog MDLC吗?

时间:2018-10-18 15:52:15

标签: c# garbage-collection nlog callcontext

我正在REST服务器中使用带有C#4.7.1的NLog 4.5.10。 我在这里使用方法MappedDiagnosticsLogicalContext.Set(item, value)将请求的一些参数添加到我的日志消息中。

现在的问题:我必须手动清理它们还是这些词典也被垃圾回收了?

据我所知,字典绑定到当前线程(通过使用ThreadId?)。当我有很多请求并且ThreadId开始再次从零开始计数时,会发生什么情况?可能发生的情况是,当销毁相应线程时,具有相同ID的最后一个线程的值仍然存在,还是销毁了那些对象?

最好的问候,丹尼尔

1 个答案:

答案 0 :(得分:0)

当线程对象被垃圾回收时,异步上下文将被“破坏”。但是,如果线程位于线程池中,则它可能“永远”存在。

也许您可以使用SetScoped:

using (MappedDiagnosticsLogicalContext.SetScoped("Property", "PropertyValue")) {
    // "Property" item is present in current context
}

另请参阅https://github.com/NLog/NLog/wiki/MDLC-Layout-Renderer#scoped-item