版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
总结
- 这里是部分尝试过的锁的释放;
- 这里有打开工作空间的释放与游标的释放两种
- 在单线程中这样顺利的执行了;多线程测试后再看~~~