NLog: ObjectReflectionCache class 总是初始化一个容量巨大的MruCache对象
NLog: ObjectReflectionCache class always initializes a MruCache object with huge capacity
我开发了一个使用 NLog 的 WPF 应用程序。
当我使用 dotMemory 对其进行分析时,我可以看到 NLogs 在配置期间创建的字典使用了约 300k 的内存。
我不知道ObjectReflectionCache 和MruCache 是做什么用的,它们的内存是否会在某个时间被释放。也许有人可以阐明 类 的用途以及字典所用的巨大容量。
谢谢。
stacktrace how NLog creates Dictionary
memory usage of Dictionary
NLog 版本: 4.7.2
平台:.NET Framework 4.6.1
当前 NLog 配置
LoggingConfiguration config = new LoggingConfiguration();
DebuggerTarget debuggerTarget = new DebuggerTarget { Name = "vs", Layout = DebuggerLayout };
DebuggerLoggingRule = new LoggingRule(nlogLoggerNamePattern, debuggerTarget);
config.LoggingRules.Add(DebuggerLoggingRule);
LogManager.Configuration = config;
为关心 300 KB 的人脱帽致敬。很久以来我一直关注这种规模的开销(但仍然很重要)。
从你的截图来看是这个合集:
词典容量为10103条。这可能是最接近 10000 的质数。
我猜 Dictionary 的 Tkey + TValue 的大小接近 30 字节。这给出了 300 KB 的总结果,尽管可能未使用。猜测 NLog 可以通过不预先分配 300 KB 来减少其初始开销。
该字典用于缓存对象反射,以记录用于结构化日志记录的对象类型。在 NLog 4.7 之前,字典仅在实际进行结构化日志记录时分配,但这随着 https://github.com/NLog/NLog/pull/3610
发生了变化
更新 NLog 版本减少了内存占用。 4.7.3
我开发了一个使用 NLog 的 WPF 应用程序。
当我使用 dotMemory 对其进行分析时,我可以看到 NLogs 在配置期间创建的字典使用了约 300k 的内存。
我不知道ObjectReflectionCache 和MruCache 是做什么用的,它们的内存是否会在某个时间被释放。也许有人可以阐明 类 的用途以及字典所用的巨大容量。
谢谢。
stacktrace how NLog creates Dictionary
memory usage of Dictionary
NLog 版本: 4.7.2
平台:.NET Framework 4.6.1
当前 NLog 配置
LoggingConfiguration config = new LoggingConfiguration();
DebuggerTarget debuggerTarget = new DebuggerTarget { Name = "vs", Layout = DebuggerLayout };
DebuggerLoggingRule = new LoggingRule(nlogLoggerNamePattern, debuggerTarget);
config.LoggingRules.Add(DebuggerLoggingRule);
LogManager.Configuration = config;
为关心 300 KB 的人脱帽致敬。很久以来我一直关注这种规模的开销(但仍然很重要)。
从你的截图来看是这个合集:
词典容量为10103条。这可能是最接近 10000 的质数。
我猜 Dictionary 的 Tkey + TValue 的大小接近 30 字节。这给出了 300 KB 的总结果,尽管可能未使用。猜测 NLog 可以通过不预先分配 300 KB 来减少其初始开销。
该字典用于缓存对象反射,以记录用于结构化日志记录的对象类型。在 NLog 4.7 之前,字典仅在实际进行结构化日志记录时分配,但这随着 https://github.com/NLog/NLog/pull/3610
发生了变化更新 NLog 版本减少了内存占用。 4.7.3