จะปลดล็อคบน gdb ได้อย่างไร?


11

ฉันมีปัญหาในการเผยแพร่ gdb ของฉันใน ArcGIS10 เครื่องมือของฉันทำงานกับ gdb ในเครื่อง แต่ฉันไม่สามารถเผยแพร่ได้หลังจากกระบวนการ ใน Ag9.3 ฉันสามารถเผยแพร่ได้ง่ายๆโดย Marshal.ReleaseComObject (พื้นที่ทำงาน) แต่ไม่สามารถใช้งานได้ใน AG10 FeatureCursors ทั้งหมดยังไม่ได้ช่วยเช่นกัน ปิดเฉพาะแอปพลิเคชันทั้งหมด "ลบ" การล็อก ไม่มีใครรู้วิธีที่จะปล่อย gdb ของฉันและ "ลบ" ล็อคโดยไม่ต้องปิดแอปพลิเคชัน?


ค้นหาไซต์นี้เพื่อ "ล็อกไฟล์ฐานข้อมูลภูมิศาสตร์" บางรายการอาจช่วยได้
Chad Cooper

แน่นอนฉันค้นหาเว็บไซต์ก่อน แต่น่าเสียดายที่ไม่มีข้อเสนอแนะช่วยฉันออก ฉันลอง 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 แต่ใน FileGeodatabase API (แยก arcobjects) ไลบรารีนี้สามารถเขียน / ปล่อยล็อกได้ แต่จะสร้างได้เฉพาะกับไลบรารีนี้เท่านั้น รูปแบบชื่อไฟล์แตกต่างกัน (ไม่รวมชื่อคอมพิวเตอร์ ฯลฯ )
mstaessen

2

การเข้าสู่สภาวะนี้เป็นเรื่องง่าย - สิ่งที่คุณต้องมีคือวัตถุหนึ่งชิ้นที่มีการอ้างอิงถึงสิ่งที่ต้องการพื้นที่ทำงานเพื่อให้มีชีวิต เช่นวัตถุที่กำหนดเองที่มีคุณสมบัติตัวอย่างเช่น

เมื่อคุณแน่ใจว่าไม่มีการอ้างอิงดังกล่าวให้ลองโทร GC.collect () เพื่อบังคับให้ตัวรวบรวมข้อมูลขยะเข้าสู่โหมดการล้างข้อมูลเสมือน


2

หากคุณใช้เคอร์เซอร์ในแอปพลิเคชันของคุณให้แน่ใจว่าใช้ ComReleaser เพื่อจัดการอายุการใช้งานของเคอร์เซอร์และทำลายมันเมื่อคุณใช้งานเสร็จ มิฉะนั้นพวกเขาสามารถล็อค DBMS ของคุณ ฉันอาจจะผิด แต่ฉันไม่เรียก 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/th/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

“ ไฟล์. ล็อคเหล่านี้จะถูกลบเมื่อใดก็ตามที่คุณเรียกใช้เครื่องมือกระชับข้อมูลเชิงพื้นที่”

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++;
}
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.