我在ArcGIS10中发布gdb时遇到问题。我的工具可与本地gdb一起使用,但在此过程之后无法释放它。在Ag9.3中,我可以简单地通过Marshal.ReleaseComObject(workspace)释放它,但这在AG10中不起作用。同时释放所有FeatureCursors也无济于事。仅关闭整个应用程序会“删除”锁。有谁知道如何在不关闭应用程序的情况下释放我的gdb和“删除”锁?
我在ArcGIS10中发布gdb时遇到问题。我的工具可与本地gdb一起使用,但在此过程之后无法释放它。在Ag9.3中,我可以简单地通过Marshal.ReleaseComObject(workspace)释放它,但这在AG10中不起作用。同时释放所有FeatureCursors也无济于事。仅关闭整个应用程序会“删除”锁。有谁知道如何在不关闭应用程序的情况下释放我的gdb和“删除”锁?
Answers:
我快速浏览了一下,发现了有关您似乎拥有的锁定方案的信息。在ArcObjects 10中,有一个SetWriteLock和FreeWriteLock选项。
请查看论坛链接,特别是来自Esri的Lance Shipman的示例, 网址为http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects
CDB玩得开心
达到这种条件很容易-您所需要的只是一个对象,该对象持有对需要工作空间保持活动的对象的引用。例如,自定义对象包含功能。
确定没有此类引用后,请尝试调用GC.collect()强制垃圾回收器进入准确定性清除模式
如果在应用程序中使用游标,请确保使用ComReleaser来管理游标的生存期并在使用完它们后销毁它们。否则,他们可以锁定您的DBMS。我可能是错的,但仅在工作空间上调用ReleaseComObject就不会删除对游标的引用。看看这个ESRI博客文章...
从http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000找到了Idea
“只要您运行地理处理压缩工具,这些.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++;
}
}