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.  







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();



        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"))