Як випустити замок на gdb?


11

У мене є проблеми випустити свій gdb в ArcGIS10. Мій інструмент працює з локальним gdb, але я не зміг його випустити після цього процесу. У Ag9.3 я можу випустити його просто Marshal.ReleaseComObject (робоча область), але це не працює в AG10. Також випуск усіх FeatureCursors не допомагає. Тільки закриття всієї програми "видаляє" замок. Хтось знає, як звільнити мій gdb і "видалити" замок, не закриваючи додаток?


Знайдіть на цьому веб-сайті "блокування файлів геоданих", деякі з них можуть допомогти.
Чад Купер

Звичайно, я раніше шукав сайт. Але, на жаль, жодна пропозиція мені не допомогла. Я спробував Compact-GP, але це не розблокувало gdb. Це також не здається осиротілим замком, тому що я не можу редагувати gdb в ArcCatalog, перш ніж закрити свою програму. Але який об’єкт мені потрібно випустити для розблокування мого gdb, крім звільнення робочої області?
AnnemieK


1
З боку gis.stackexchange.com/questions/6230/… , здається, ви натрапили на помилку. Якщо жоден із наведених нижче відповідей не застосовується, я б звернувся за технічною підтримкою Esri.
matt wilkie

Відповіді:


2

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

подивіться на посилання на форум, зокрема зразок від Lance Shipman з Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

Розважись, CDB


SetWriteLock і FreeWriteLock знаходяться не в ArcObjects, а в API FileGeodatabase (окремий аркобект). Ця бібліотека може записувати / випускати блокування, але лише ті, які були створені за допомогою цієї бібліотеки. Шаблон імені файлу інший (не включає ім'я комп’ютера тощо).
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 видаляються щоразу, коли ви запускаєте компактний інструмент для геообробки"

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++;
}
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.