IFeatureClass.Search方法的 bool Recycling 参数理解

IFeatureClass的Search方法 大家经常用到,很多人对Search方法的其中一个参数bool Recycling不是很理解。

我经过测试提出个人的观点:
1.IFeatureCursor存储的是所有符合条件的Feature对象的引用,
2.Recycling的意思是回收,参数Recycling为True的时当执行这个方法IFeature pFeature=pFeatureCursor.NextFeature()上一条记录的值在内存中所占的地址就会被销毁回收,为False的时候当执行这个方法IFeature pFeature=pFeatureCursor.NextFeature()上一条记录的值依然存在在内存中。

3. 回收参数控制行对象分配行为。回收游标可在每次提取时为单个要素对象重新水化,并可用于优化只读访问,例如,在绘制时。在多个对游标的NextFeature的调用上维护对回收游标返回的要素对象的引用是非法的。不应修改回收光标返回的功能。非回收游标在每次获取时返回单独的功能对象。可以修改非循环游标返回的特征并以多态行为存储。

地理数据库保证在编辑会话期间获取的非回收功能对象上的“唯一实例语义”。换句话说,如果搜索光标检索到的特征已经被实例化并且正在被调用应用程序引用,则返回对现有特征对象的引用。

搜索方法返回的非回收功能游标*必须*在将游标中的要素复制到另一个类的插入游标时使用。这是因为回收光标重用相同的几何图形,并且在某些情况下插入到插入光标中的所有要素可能具有相同的几何图形。使用非循环游标可确保每个几何体都是唯一的。



1.参数Recycling设置为True ,出现问题:要素已删除,因对搜索到的要素进行了打断处理,要素本身已经存在,及内存中没有该记录了
  
分析:IFeatureCursor集合存储了指向IFeatureClass上所有Feature的引用,但是由于Recycling参数设置为TRUE也就是说每执行一个NextFeautre方法上一条记录的Feature值在内存中被回收,所以到最后遍历pFeatures集合的时候所有的IFeature引用指向的Feature对象都为Null。所以会引发一下错误(如下图所示):


2.参数Recycling设置为False
          
分析:pFeatures集合存储了指向FeatureClass上所有Feature的引用,但是由于Recycling参数设置为False也就是说每执行一个NextFeautre方法上一条记录的Feature值在内存中依然存在,所以到最后遍历pFeatures集合的时候所有的IFeature引用指向的Feature对象都依然存在。程序正常运行。

3 总结:如果只是对要素的属性信息进行编辑的话,建议bool Recycling为true,能减少内存的消耗;当操作造成要素类要素个数或者几何图形发生变化时bool Recycling应设置为false。

猜你喜欢

转载自blog.csdn.net/xxf813/article/details/81226769