Como liberar o bloqueio em um gdb?


11

Tenho problemas para liberar meu gdb no ArcGIS10. Minha ferramenta funciona com um gdb local, mas não consegui liberá-lo após o processo. No Ag9.3, posso liberá-lo simplesmente por Marshal.ReleaseComObject (espaço de trabalho), mas isso não funciona no AG10. Também liberar todos os FeatureCursors não ajuda. Somente o fechamento de todo o aplicativo "exclui" o bloqueio. Alguém sabe como liberar meu gdb e "excluir" o bloqueio sem fechar o aplicativo?


Pesquise neste site por "bloqueio de arquivo geodatabase", alguns deles podem ajudar.
Chad Cooper

Claro que eu procurei no site antes. Infelizmente, nenhuma das sugestões me ajudou. Eu tentei o Compact-GP, mas isso não desbloqueou o gdb. Também não parece ser um bloqueio órfão, porque não consigo editar o gdb no ArcCatalog antes de fechar meu aplicativo. Mas qual objeto devo liberar para desbloquear meu gdb, além de liberar o espaço de trabalho?
Annemiek


1
Em gis.stackexchange.com/questions/6230/… , parece que você pode ter encontrado um bug. Se nenhuma das respostas abaixo se aplicar, eu entraria em contato com o suporte técnico da Esri.
Matt Wilkie

Respostas:


2

Eu dei uma olhada rápida e encontrei informações sobre o cenário de bloqueio que você parece estar tendo. No ArcObjects 10, há as opções SetWriteLock e FreeWriteLock.

dê uma olhada no link do fórum especificamente na amostra de Lance Shipman da Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

Divirta-se, CDB


SetWriteLock e FreeWriteLock não estão no ArcObjects, mas na API FileGeodatabase (separado de arcobjects). Essa biblioteca pode gravar / liberar bloqueios, mas apenas os que foram criados com esta biblioteca. O padrão do nome do arquivo é diferente (não inclui o nome do computador etc.).
mstaessen

2

É fácil chegar a essa condição - tudo o que você precisa é de um objeto que esteja mantendo uma referência a algo que precisa da área de trabalho para permanecer vivo. Como um objeto personalizado que contém um Recurso, por exemplo.

Depois de ter certeza de que não possui essas referências, tente chamar GC.collect () para forçar o coletor de lixo para um modo de limpeza quase determinístico


2

Se você estiver usando cursores em seu aplicativo, certifique-se de usar o ComReleaser para gerenciar a vida útil dos cursores e destruí-los quando terminar com eles. Caso contrário, eles podem bloquear seu DBMS. Posso estar errado, mas não chamo ReleaseComObject apenas na área de trabalho remove a referência aos cursores. Dê uma olhada nesta postagem no blog da 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

Idéia encontrada em http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

“Esses arquivos .lock são removidos sempre que você executa a ferramenta Compact de geoprocessamento”

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++;
}
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.