-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



mercoledì 24 dicembre 2008

ComReleaser - gestione del ciclo di vita dei cursori

I cursori del geodatabase dovrebbero sempre venire esplicitamente distrutti in un ambiente che utilizza la garbage collection. La regola è sempre rilasciare un oggetto COM non appena l'applicazione ha finito di utilizzare il suo riferimento. Questo è particolarmente importante con i cursori del geodatabase poichè fallire il rilascio dei cursori può mettere in uno stato di lock il sistema e le risorse dbms; un sintomo comune è il blocco di una tabella per un tempo indeterminato dopo
aver finito di ciclare sulle righe con un search cursor.
Questo articolo è una lettura fondamentale per gli sviluppatori che usano il geodatabase API: dimostra l'importanza di rilasciare gli oggetti COM (e specialmente i cursori) e di utilizzare un approccio diverso.
Molti sviluppatori .NET che hanno lavorato con il COM interop conosceranno già il metodo statico Marshal.ReleaseComObject, ma c'è anche una sezione dedicata ad una classe nell'ADF chiamata ComReleaser che è veramente utile quando si lavora con i cursori.

Ecco un esempio dell'uso del ComReleaser per assicurarsi che il cursore sia propriamente rilasciato:


using (ComReleaser comReleaser = new ComReleaser())

        {

 

            // Istanzia un cursore e gestisci il ciclo di vita con il ComReleaser.

 

            IFeatureCursor featureCursor = featureClass.Search(null, true);

 

            comReleaser.ManageLifetime(featureCursor);

 

 

 

            // Cicla attraverso le features.

 

            IFeature feature = null;

 

            while ((feature = featureCursor.NextFeature()) != null)

            {

 

                // Fai qualcosa

 

            }

 

        }



Indipendentemente da come il codice lascia questo blocco using (se un valore è restituito, se viene gettata un'eccezione o esce) il
cursore comunque avrà il proprio reference count correttamente decrementato.

Vedi articolo

Nessun commento: