Tengo problemas para liberar mi gdb en ArcGIS10. Mi herramienta funciona con un local de gdb, pero no pude liberarlo después del proceso. En Ag9.3 puedo liberar simplemente por el Mariscal.ReleaseComObject(espacio de trabajo), pero esto no funciona en AG10. También la liberación de todos los FeatureCursors no ayuda. Sólo el cierre de la aplicación en su totalidad "elimina" el bloqueo. ¿Alguien sabe cómo liberar mi gdb y "eliminar" el bloqueo, sin necesidad de cerrar la aplicación?
Respuestas
¿Demasiados anuncios?Llegar a esta condición es fácil - todo lo que necesita es un objeto que contiene una referencia a algo que necesita el área de trabajo para mantenerse con vida. Como un objeto personalizado que tiene una Característica, por ejemplo.
Una vez que esté seguro de que usted no tenga ninguna de estas referencias, intente llamar a la GC.collect() para forzar el recolector de basura en una cuasi-determinista modo de limpieza
Yo tenía una mirada rápida y se encontró información sobre el bloqueo de escenario que parece estar teniendo. En ArcObjects 10 hay un SetWriteLock y FreeWriteLock opción.
mira el enlace de foro específicamente la muestra de Lanza de Shipman de Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects
Divertirse, CDB
Si usted está usando los cursores en su aplicación, asegúrese de usar el ComReleaser para gestionar la vida útil de los cursores y destruirlos cuando haya terminado con ellos. De lo contrario, se puede bloquear el DBMS. Yo podría estar equivocado, pero yo no creo que llamar a ReleaseComObject en el área de trabajo solo elimina la referencia a los cursores. Echa un vistazo a este post en el blog de ESRI...
Encontrado Idea de http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000
"Estos .bloqueo de archivos se eliminan cada vez que se ejecuta el geoprocesamiento herramienta Compacta"
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++;
}
}