AnsweredAssumed Answered

LicenseInitilizer memory leak on db connection?

Question asked by StevenCornelius on May 5, 2019

LicenseInitializer leaks memory when call are made to a SQL server using LINQ.  

 

The code below leaks finalization handles, one for each data context created.  I believe that the esri licence system is listening for database connection events and firing an event handler.  I expect this is required to check licencing of SDE databases. The SQl server I am using does not have an SDE, it is a vanilla MS SQL server,  Evidently the fired event handler creates a number of objects that are not finalized/disposed correctly and accumulate in memory as they can't be garbage collected.  

 

Adding a "GC.WaitForPendingFinalizers();" in the for loop, after the DataContext has been destroyed seems to release the offending objects but this is computationally expensive.

 

I believe this is a bug in esri's licencing system.  Has anyone seen this previously.  

 

Thanks

 

Steven 

 

 

using ESRI.ArcGIS.esriSystem;

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Data.Linq;

namespace ArcLeakTesting

{

    class Program

    {

        private static LicenseInitializer m_AOLicenseInitializer = new ArcLeakTesting.LicenseInitializer();

 

        [STAThread()]

        static void Main(string[] args)

        {

            m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] {esriLicenseProductCode.esriLicenseProductCodeStandard , new esriLicenseExtensionCode[] { });

            for (int i = 0; i < 1000000; i++)

            {

                using (DataContext db = new DataContext(@"Server=tcp:XXXX\SQLEXPRESS,YYYYY;Database=ZZZZZ;User Id = AAAAAA;Password=BBBBBBB"))

                {

                }

            }

            m_AOLicenseInitializer.ShutdownApplication();

        }

    }

}

Outcomes