关于ArcGIS Engine中Shape文件锁的释放(rd.lock,sr.lock,wr.lock)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sx341125/article/details/84659955

本文主要介绍rd.lock、sr.lock与wr.lock的释放问题,之后可能会引申到多线程中的批处理shape时锁的问题!


PS: 补充多线程处理shape 2018.12.04
经测试,使用Parallel.For测试批量处理shape成功,没有使用共享数据资源,只是需要注意锁的释放问题!使用后最好立即释放掉~


需求

需要批处理点shape,根据点生成相关的面shape(其实我很想使用c++ ogr来做),在没有消除锁时则不能往shape写入数据或者其他相关会产生锁的操作,考虑到时间成本,先使用AE这个比较熟悉的库,后期有空再补上!

调试

  • 在使用IFeatureClass.OpenFeatureClass()之后生成了sr.lock文件,在IFeatureClass.Search()之后会生成rd.lock文件,在IFeatureClass.Insert()之后会产生wr.lock文件;

解决

  • 消除sr.lock伪代码:
IWorkspaceFactoryLockControl control = IWrokspaceFactory as IWorkspaceFactoryLockControl;
if(control.SchemaLockingEnabled)
{
	control.DisableSchemaLocking();
}
  • 消除rd.lock伪代码(读取锁?):
System.Runtime.InteropServices.Marshal.ReleaseComObject(IFeatureSearchCursor);
  • 消除wr.lock伪代码(写入锁?):
System.Runtime.InteropServices.Marshal.ReleaseComObject(IFeatureInsertCursor);

总结

  • 这里是部分尝试过的锁的释放;
  • 这里有打开工作空间的释放与游标的释放两种
  • 在单线程中这样顺利的执行了;多线程测试后再看~~~

猜你喜欢

转载自blog.csdn.net/sx341125/article/details/84659955