我正在REST服务器中使用带有C#4.7.1的NLog 4.5.10。
我在这里使用方法MappedDiagnosticsLogicalContext.Set(item, value)
将请求的一些参数添加到我的日志消息中。
现在的问题:我必须手动清理它们还是这些词典也被垃圾回收了?
据我所知,字典绑定到当前线程(通过使用ThreadId?)。当我有很多请求并且ThreadId开始再次从零开始计数时,会发生什么情况?可能发生的情况是,当销毁相应线程时,具有相同ID的最后一个线程的值仍然存在,还是销毁了那些对象?
最好的问候,丹尼尔
答案 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