Как снять блокировку с gdb?

11

У меня проблемы с выпуском моего GDB в ArcGIS10. Мой инструмент работает с локальным GDB, но я не смог выпустить его после процесса. В Ag9.3 я могу выпустить его просто Marshal.ReleaseComObject (рабочая область), но в AG10 это не работает. Также освобождение всех FeatureCursors не помогает. Только закрытие всего приложения «удаляет» блокировку. Кто-нибудь знает, как освободить мой gdb и «удалить» блокировку, не закрывая приложение?

Annemiek
источник
Поищите на этом сайте «блокировку файловой базы геоданных», некоторые из них могут помочь.
Чед Купер
Конечно, я искал сайт раньше. Но, к сожалению, ни одно из предложений не помогло мне. Я попробовал Compact-GP, но это не разблокировало GDB. Это также не казалось осиротевшим замком, потому что я не могу отредактировать GDB в ArcCatalog, прежде чем закрыть свое приложение. Но какой объект мне нужно освободить для разблокировки моего GDB в дополнение к освобождению рабочей области?
AnnemieK
1
С сайта gis.stackexchange.com/questions/6230/… вы можете столкнуться с ошибкой. Если ни один из ответов ниже не подходит, я бы проконсультировался с технической поддержкой Esri.
Мэтт Вилки

Ответы:

2

Я быстро посмотрел и нашел информацию о сценарии блокировки, который у вас, похоже, есть. В ArcObjects 10 есть опция SetWriteLock и FreeWriteLock.

взгляните на ссылку на форуме, а именно образец Ланса Шипмана из Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

Веселись, CDB

CDBrown
источник
SetWriteLock и FreeWriteLock находятся не в ArcObjects, а в API FileGeodatabase (отдельно от arcobjects). Эта библиотека может писать / снимать блокировки, но только те, которые были созданы с этой библиотекой. Шаблон имени файла отличается (не включает имя компьютера и т. Д.).
mstaessen
2

Достигнуть этого условия легко - все, что вам нужно, это один объект, который содержит ссылку на что-то, для чего требуется рабочее пространство, чтобы остаться в живых. Например, пользовательский объект, который содержит функцию.

Если вы уверены, что у вас нет таких ссылок, попробуйте вызвать GC.collect (), чтобы заставить сборщик мусора перейти в квази-детерминированный режим очистки.

Раги Язер Бурхум
источник
2

Если вы используете курсоры в своем приложении, обязательно используйте ComReleaser для управления временем жизни курсоров и уничтожения их, когда вы закончите с ними. В противном случае они могут заблокировать вашу СУБД. Я могу ошибаться, но я не думаю, что вызов ReleaseComObject только для рабочей области удаляет ссылку на курсоры. Взгляните на это сообщение в блоге 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

Найденная идея от http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

«Эти файлы .lock удаляются всякий раз, когда вы запускаете инструмент геообработки 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++;
}
}
Аджай
источник