Bagaimana cara melepaskan kunci pada gdb?

11

Saya memiliki masalah untuk melepaskan gdb di ArcGIS10. Alat saya berfungsi dengan gdb lokal, tetapi saya gagal melepaskannya setelah proses. Di Ag9.3 saya bisa merilisnya hanya dengan Marshal.ReleaseComObject (workspace), tetapi ini tidak bekerja di AG10. Juga melepaskan semua FeatureCursors tidak membantu. Hanya menutup seluruh aplikasi "menghapus" kunci. Adakah yang tahu cara melepaskan gdb dan "menghapus" kunci tanpa menutup aplikasi?

AnnemieK
sumber
Cari situs ini untuk "kunci file geodatabase", beberapa di antaranya mungkin membantu.
Chad Cooper
Tentu saja saya mencari situs itu sebelumnya. Tapi sayangnya tidak ada saran yang membantu saya. Saya mencoba Compact-GP, tetapi ini tidak membuka gdb. Tampaknya juga bukan kunci yatim, karena saya tidak dapat mengedit gdb di ArcCatalog sebelum saya menutup Aplikasi saya. Tapi objek mana yang harus saya lepaskan untuk membuka kunci gdb selain melepaskan ruang kerja?
AnnemieK
1
Dari gis.stackexchange.com/questions/6230/… , tampaknya Anda mungkin mengalami bug. Jika tidak ada jawaban di bawah ini yang berlaku, saya akan menindaklanjuti dengan dukungan teknis Esri.
matt wilkie

Jawaban:

2

Saya melihat sekilas dan menemukan informasi tentang skenario penguncian yang tampaknya Anda alami. Di ArcObjects 10 ada opsi SetWriteLock dan FreeWriteLock.

lihat tautan forum khusus sampel dari Lance Shipman dari Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-ar-obcobjects

Bersenang-senanglah, CDB

CDBrown
sumber
SetWriteLock dan FreeWriteLock tidak di ArcObjects tetapi di FileGeodatabase API (Terpisah dari arcobjects). Pustaka ini bisa menulis / melepaskan kunci tetapi hanya yang dibuat dengan pustaka ini. Pola nama file berbeda (tidak termasuk nama komputer, dll.).
mstaessen
2

Untuk mencapai kondisi ini mudah - yang Anda butuhkan hanyalah satu objek yang memegang referensi ke sesuatu yang membutuhkan ruang kerja agar tetap hidup. Seperti objek khusus yang menyimpan Fitur misalnya.

Setelah Anda yakin tidak memiliki referensi seperti itu, coba panggil GC.collect () untuk memaksa pemulung ke mode pembersihan kuasi-deterministik

Ragi Yaser Burhum
sumber
2

Jika Anda menggunakan kursor dalam aplikasi Anda, pastikan untuk menggunakan ComReleaser untuk mengelola masa pakai kursor dan menghancurkannya ketika Anda selesai menggunakannya. Kalau tidak, mereka dapat mengunci DBMS Anda. Saya mungkin salah, tapi saya tidak memanggil ReleaseComObject di ruang kerja saja menghapus referensi ke kursor. Lihatlah posting blog ESRI ini ...

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

Jeff Berry
sumber
0

Ditemukan Ide dari http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

"File .lock ini dihapus setiap kali Anda menjalankan alat Compact geoprosesing"

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++;
}
}
Ajay
sumber