Bir gdb üzerindeki kilit nasıl serbest bırakılır?


11

GDG'mi ArcGIS10'da yayınlamakta sorun yaşıyorum. Aracım yerel bir gdb ile çalışıyor, ancak işlemden sonra serbest bırakamadım. Ag9.3'te sadece Marshal.ReleaseComObject (çalışma alanı) tarafından serbest bırakabilirim, ancak bu AG10'da çalışmaz. Ayrıca tüm FeatureCursors yayınlamak da yardımcı olmaz. Sadece tüm uygulamanın kapatılması kilidi "siler". Herkes benim gdb serbest bırakmak ve uygulamayı kapatmadan kilidi "silmek" biliyor mu?


Bu sitede "dosya coğrafi veritabanı kilidi" araması yapın, bunlardan bazıları yardımcı olabilir.
Chad Cooper

Tabii daha önce siteyi aradım. Ama ne yazık ki hiçbir öneri bana yardımcı olmadı. Compact-GP'yi denedim, ancak bu gdb'nin kilidini açmadı. Ayrıca yetim bir kilit gibi görünmüyordu, çünkü Uygulamamı kapatmadan önce ArcCatalog'daki gdb'yi düzenleyemiyorum. Ancak çalışma alanını serbest bırakmanın yanı sıra gdb'nin kilidini açmak için hangi nesneyi serbest bırakmak zorundayım?
AnnemieK


1
Gönderen gis.stackexchange.com/questions/6230/... , bir hata girmek olabileceği belirtildi. Aşağıdaki cevapların hiçbiri geçerli değilse, Esri teknik desteğini takip ederdim.
matt wilkie

Yanıtlar:


2

Hızlıca baktım ve sahip olduğunuz kilitleme senaryosu hakkında bilgi buldum. ArcObjects 10'da bir SetWriteLock ve FreeWriteLock seçeneği vardır.

forum bağlantısına özellikle Esri'den Lance Shipman örneğine bir göz atın http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

İyi Eğlenceler, CDB


SetWriteLock ve FreeWriteLock, ArcObjects'te değil, FileGeodatabase API'sinde (Arcobjects ayrı). Bu kütüphane kilitleri yazabilir / serbest bırakabilir, ancak yalnızca bu kütüphane ile oluşturulan kilitleri yazabilir. Dosya adı şablonu farklıdır (bilgisayar adı vb. İçermez).
mstaessen

2

Bu koşula ulaşmak kolaydır - tek ihtiyacınız olan şey, hayatta kalmak için çalışma alanına ihtiyaç duyan bir şeye referans tutan bir nesnedir. Örneğin, bir Özelliğe sahip özel bir nesne gibi.

Böyle bir referansa sahip olmadığınızdan emin olduktan sonra, çöp toplayıcıyı yarı belirleyici bir temizleme moduna zorlamak için GC.collect () 'i çağırmayı deneyin.


2

Uygulamanızda imleçler kullanıyorsanız, imleçlerin ömrünü yönetmek ve onlarla işiniz bittiğinde bunları yok etmek için ComReleaser'ı kullandığınızdan emin olun. Aksi takdirde DBMS'nizi kilitleyebilirler. Ben yanlış olabilir ama ben sadece çalışma alanında ReleaseComObject çağırmak bir şey yok imleç referans kaldırır. Bu ESRI blog yayınına bir göz atın ...

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/tr/arcgisdesktop/10.0/help/index.html#//003n0000007w000000 adresinden Fikir bulundu

“Geoprocessing Compact aracını her çalıştırdığınızda bu .lock dosyaları kaldırılır”

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++;
}
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.