C# 使用log4net无法释放内存

C# 使用log4net无法释放内存,c#,.net,log4net,log4net-appender,C#,.net,Log4net,Log4net Appender,我使用log4netsmemoryaappender记录调试消息,出于某种原因,即使在清除事件时,内存也不会被释放。即使在运行一些示例代码时,这也是一个大问题,因为内存使用量高达1GB+ 我曾尝试强制GC收集,但在清除事件后,它确实会将使用量降低约2MB,但稍后它会再次出现。清除事件和创建新的appender对象根本没有帮助。当检查诊断窗口时,我看到下图。有人知道泄漏的原因吗?为什么它总是充满 追加器创建: appender = new MemoryAppender(); LoggerMatch

我使用log4nets
memoryaappender
记录调试消息,出于某种原因,即使在清除事件时,内存也不会被释放。即使在运行一些示例代码时,这也是一个大问题,因为内存使用量高达1GB+

我曾尝试强制GC收集,但在清除事件后,它确实会将使用量降低约2MB,但稍后它会再次出现。清除事件和创建新的appender对象根本没有帮助。当检查诊断窗口时,我看到下图。有人知道泄漏的原因吗?为什么它总是充满

追加器创建:

appender = new MemoryAppender();
LoggerMatchFilter f = new LoggerMatchFilter{ LoggerToMatch = "MemoryLogger" };
appender.AddFilter(f);
appender.ActivateOptions();
GetRootLogger().AddAppender(appender);
Logger logger = (Logger)log.Logger;
logger.AddAppender(appender);
清除事件(在重写的追加方法中执行):

诊断快照

请Google引导一个类似问题的讨论,该问题涉及log4j

在这里,问题是由创建许多具有不同名称的记录器引起的。 log4j将所有这些记录器保存在一个
哈希表中,这样它们就不会被垃圾收集

建议的解决方案是重用记录器对象,而不是创建新的记录器对象


因此,如果你在应用程序中创建了大量新的日志记录程序,这可能是个问题。

你可以包含标题名称,否则很难跟踪数字…另外,请显示代码-如何创建appender,如何强制GC收集内存。你如何覆盖Append()还不清楚方法,但仍创建MemoryAppender基类。因此,一个简单的解释是,您的附加覆盖从未被使用。因此,这个名单永远不会被清除。我已经创建了一个从基MemoryAppender继承的新类,在那里Append()方法被覆盖。我已经在它上面设置了一个断点,并确保它清除了事件,所以这不是问题所在。遗憾的是:/我已经尝试重用旧对象,甚至将其设置为单例,遗憾的是,同样的问题正在发生。
if(m_eventsList.Count > 200)
{
   m_eventsList.Clear();
   GC.Collect();
   GC.WaitForPendingFinalizers();
}