© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•4y ago•
5 replies
davidrulez

Need help finding memory leak [Answered]

We have a solution with a mix of VB and C# projects. Most of them in VB. We have a logger factory written in C# that is used by VB code to write log using nlog. When running load test I see that it consumes close to 4GB of memory. I used debug diag and mempory profiler and they all recommend an event handler leak as seen in the screenshot
The code flow for one of the call stack is as seen below:
Public Class ScreenText Implements System.Collections.IEnumerable
    Private logger As ILogger = New LoggerFactory().CreateLoggerNlog("Admin_" + DateTime.Now.ToString("yyyyMMdd"))
    ...
    ...
Public Class ScreenText Implements System.Collections.IEnumerable
    Private logger As ILogger = New LoggerFactory().CreateLoggerNlog("Admin_" + DateTime.Now.ToString("yyyyMMdd"))
    ...
    ...

----------------
public class LoggerFactory : ILoggerFactory
{
    public ILogger CreateLoggerNlog(string categoryName)
    {
        this.AddNLog(new NLog.LogFactory());
        Logger logger;
        lock (_sync)
        {
            if (!_loggers.TryGetValue(categoryName, out logger))
            {
                logger = new Logger(this, categoryName);
                _loggers[categoryName] = logger;
            }
        }
        return logger;
    }
    .....
}
public class LoggerFactory : ILoggerFactory
{
    public ILogger CreateLoggerNlog(string categoryName)
    {
        this.AddNLog(new NLog.LogFactory());
        Logger logger;
        lock (_sync)
        {
            if (!_loggers.TryGetValue(categoryName, out logger))
            {
                logger = new Logger(this, categoryName);
                _loggers[categoryName] = logger;
            }
        }
        return logger;
    }
    .....
}

-----------
public static class NLogLoggerFactoryExtensions
{
    public static ILoggerFactory AddNLog(
        this ILoggerFactory factory,
        global::NLog.LogFactory logFactory)
    {
        factory.AddProvider(new NLogLoggerProvider(logFactory));
        return factory;
    }
}
public static class NLogLoggerFactoryExtensions
{
    public static ILoggerFactory AddNLog(
        this ILoggerFactory factory,
        global::NLog.LogFactory logFactory)
    {
        factory.AddProvider(new NLogLoggerProvider(logFactory));
        return factory;
    }
}

------------
public class NLogLoggerProvider : ILoggerProvider
{
    private readonly LogFactory _logFactory;

    public NLogLoggerProvider(LogFactory logFactory)
    {
        _logFactory = logFactory;
    }
    ....
}
public class NLogLoggerProvider : ILoggerProvider
{
    private readonly LogFactory _logFactory;

    public NLogLoggerProvider(LogFactory logFactory)
    {
        _logFactory = logFactory;
    }
    ....
}

-------------
Looks like if i set logger = Nothing inside ScreenText class' Finalize() method. This issue isnt happening. But I am wondering if there is problem in logger factory approach that is the main reason and why these are showing as event handler leaks?
unknown.png
Screenshot_1.jpg
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Memory leak : WeakReferences
C#CC# / help
17mo ago
Debugging memory leak
C#CC# / help
17mo ago
❔ dataset memory leak
C#CC# / help
3y ago