我在REST服务器中使用带有C# 4.7.1的NLog 4.5.10。在这里,我使用方法MappedDiagnosticsLogicalContext.Set(item, value)
将请求的一些参数添加到日志消息中。
现在的问题是:我是否必须手动清理它们,或者这些字典也是垃圾收集的吗?
据我所知,字典绑定到当前线程(通过使用ThreadId?)。当我有许多请求,而ThreadId又开始从零开始计数时,会发生什么?可能发生的情况是,具有相同Id的最后一个线程的值仍然在那里,或者当相应的线程被销毁时,这些对象会被销毁吗?
致以最好的问候,丹尼尔
发布于 2018-10-22 02:01:22
当线程对象被垃圾回收时,异步上下文将被“销毁”。但是如果线程存在于线程池中,那么它可能会“永远”存在。
也许你可以使用SetScoped:
using (MappedDiagnosticsLogicalContext.SetScoped("Property", "PropertyValue")) {
// "Property" item is present in current context
}
另请参阅https://github.com/NLog/NLog/wiki/MDLC-Layout-Renderer#scoped-item
https://stackoverflow.com/questions/52877961
复制相似问题