注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员驿站

淘宝店:http://shop106888457.taobao.com

 
 
 

日志

 
 

FeatureClass.Search(IQuery Filter,bool Recycling)参数说明  

2013-08-09 17:24:59|  分类: ArcEngine |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
FeatureClass的Search方法大家经常用到,很多人对Search方法的其中一个参数bool Recycling不是很理解。先做以下解释:

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

  IFeatureClass pFeatureClass = (this.axMapControl1.get_Layer(0) as IFeatureLayer).FeatureClass;
            IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true);
            //IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);
            List<IFeature> pFeatures = new List<IFeature>();
            IFeature pFeature = pFeatureCursor.NextFeature();
            while (pFeature != null)
            {
                pFeatures.Add(pFeature);
                pFeature = pFeatureCursor.NextFeature();
            }
            for (int i = 0; i < pFeatures.Count; i++)
            {
                MessageBox.Show(((pFeatures.Shape as IPolygon) as IArea).Area.ToString());
            }

分析:pFeatures集合存储了指向FeatureClass上所有Feature的引用,但是由于Recycling参数设置为TRUE也就是说每执行一个NextFeautre方法上一条记录的Feature值在内存中被回收,所以到最后遍历pFeatures集合的时候所有的IFeature引用指向的Feature对象都为Null。所以会引发一下错误(如下图所示):

FeatureClass.Search(IQuery Filter,bool Recycling)参数说明 - dingtao-wgs - 程序员驿站

 参数Recycling设置为False
    IFeatureClass pFeatureClass = (this.axMapControl1.get_Layer(0) as IFeatureLayer).FeatureClass;
            //IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true);
            IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);
            List<IFeature> pFeatures = new List<IFeature>();
            IFeature pFeature = pFeatureCursor.NextFeature();
            while (pFeature != null)
            {
                pFeatures.Add(pFeature);
                pFeature = pFeatureCursor.NextFeature();
            }
            for (int i = 0; i < pFeatures.Count; i++)
            {
                MessageBox.Show(((pFeatures.Shape as IPolygon) as IArea).Area.ToString());
            }

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

FeatureClass.Search(IQuery Filter,bool Recycling)参数说明 - dingtao-wgs - 程序员驿站
 
  评论这张
 
阅读(577)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018