Come rilasciare il blocco su un gdb?


11

Ho problemi a rilasciare il mio gdb in ArcGIS10. Il mio strumento funziona con un gdb locale, ma non sono riuscito a rilasciarlo dopo il processo. In Ag9.3 posso rilasciarlo semplicemente da Marshal.ReleaseComObject (spazio di lavoro), ma questo non funziona in AG10. Anche il rilascio di tutti i FeatureCursors non aiuta. Solo la chiusura dell'intera applicazione "elimina" il blocco. Qualcuno sa come rilasciare il mio gdb ed "eliminare" il blocco senza chiudere l'applicazione?


Cerca "blocco geodatabase file" in questo sito, alcuni di questi potrebbero aiutare.
Chad Cooper,

Naturalmente ho cercato prima nel sito. Ma sfortunatamente nessuno dei suggerimenti mi ha aiutato. Ho provato il Compact-GP, ma questo non ha sbloccato il gdb. Inoltre, non sembra essere un blocco orfano, perché non riesco a modificare il gdb in ArcCatalog prima di chiudere l'applicazione. Ma quale oggetto devo rilasciare per sbloccare il mio gdb oltre a rilasciare l'area di lavoro?
AnnemieK,


1
Da gis.stackexchange.com/questions/6230/… , sembra che potresti aver riscontrato un errore. Se nessuna delle risposte seguenti si applica, darei seguito al supporto tecnico di Esri.
matt wilkie,

Risposte:


2

Ho dato una rapida occhiata e ho trovato informazioni sullo scenario di blocco che sembra avere. In ArcObjects 10 è presente un'opzione SetWriteLock e FreeWriteLock.

dai un'occhiata al link del forum in particolare l'esempio di Lance Shipman di Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

Buon divertimento, CDB


SetWriteLock e FreeWriteLock non si trovano in ArcObjects ma nell'API FileGeodatabase (separata da arcobjects). Questa libreria può scrivere / rilasciare blocchi ma solo quelli creati con questa libreria. Il modello del nome file è diverso (non include il nome del computer, ecc.).
mstaessen,

2

Raggiungere questa condizione è semplice: tutto ciò di cui hai bisogno è un oggetto che contenga un riferimento a qualcosa che ha bisogno dello spazio di lavoro per rimanere in vita. Ad esempio un oggetto personalizzato che contiene una caratteristica.

Quando sei sicuro di non avere tali riferimenti, prova a chiamare GC.collect () per forzare il garbage collector in una modalità di pulizia quasi deterministica


2

Se stai usando i cursori nella tua applicazione, assicurati di usare ComReleaser per gestire la durata dei cursori e distruggerli quando hai finito con loro. Altrimenti possono bloccare il tuo DBMS. Potrei sbagliarmi, ma non sto parlando di ReleaseComObject nell'area di lavoro da sola rimuove il riferimento ai cursori. Dai un'occhiata a questo post sul blog ESRI ...

http://blogs.esri.com/Dev/blogs/geodatabase/archive/2008/12/18/Using-the-ComReleaser-to-manage-the-lifetime-of-cursors-in-.NET.aspx


0

Idea trovata su http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

"Questi file .lock vengono rimossi ogni volta che esegui lo strumento geoprocessing Compact"

string[] lockfiles = Directory.GetFiles(project.Path, "*.lock",   SearchOption.AllDirectories);

if(lockfiles.Length > 0)
{
int lockCt = 0;
while (lockCt < lockfiles.Length)
{
 string inFGDB = System.IO.Path.GetDirectoryName(lockfiles[lockCt]);

 ESRI.ArcGIS.DataManagementTools.Compact compactProcess = new   ESRI.ArcGIS.DataManagementTools.Compact();

 compactProcess.in_workspace = inFGDB;

 geoprocessor.Execute(compactProcess ,null);

  lockCt++;
}
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.