I'm running a windows service using TopShelf (based on console app in C# .NET 4.6.1) and I'm using Automapper 9.0.0. Every 10 seconds I run a task that processes about 1000 rows in a Ms SQL database (using entity framework), It seems like Automapper is taking up a lot of memory, and the memory grows each time the task is run (In task manager I can see the service taking up over 3000 Meg of RAM++).
I am new to Automapper and don't now if there is anything I need to code to release manually the memory. Somewhere I saw a huge amount of handlers and I was wondering if Automapper generates these handlers and how I can clean them up.
I tried putting a GC.Collect() at the end of each task but I don't seem to see a difference
Here is a code extract of my task:
private void _LiveDataTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // setting up Ninject data injection
            var kernel = new StandardKernel();
            kernel.Load(Assembly.GetExecutingAssembly());
            //var stationExtesions = kernel.Get<IStationExtensionRepository>();
            //var ops = kernel.Get<IOPRepository>();
            //var opExtensions = kernel.Get<IOPExtensionRepository>();
            //var periods = kernel.Get<IPeriodRepository>();
            //var periodExtensions = kernel.Get<IPeriodExtensionRepository>();
            // create the LiveDataTasks object
            //var liveDataTasks = new LiveDataTasks(stationExtesions, ops, opExtensions, periods, periodExtensions);
            // sync the station live data
            //liveDataTasks.SyncLiveStationData();
            // force garbage collection to prevent memory leaks
            //GC.Collect();
            Console.WriteLine("LiveDataTimer: Total available memory before collection: {0:N0}", System.GC.GetTotalMemory(false));
            System.GC.Collect();
            Console.WriteLine("LiveDataTimer: Total available memory collection: {0:N0}", System.GC.GetTotalMemory(true));
        }
MOFICATIONS: I added some console outputs at the end of the code displaying the TotalMemory used. I removed GC.Collect() because it doesn't change anything and commented out most of the code accessing database. Now I realize that kernel.Load(Assembly.GetExecutingAssembly()); already makes memory grow very fast. See the following console capture:
 Now if I comment out
Now if I comment out kernel.Load(Assembly.GetExecutingAssembly()); I get a stable memory situation again. How can I Dispose or unload the Kernel???


 
    