Hopes

          Start Here..

           

          FeatureClass.Search(IQuery Filter,bool Recycling)參數(shù)說明

          FeatureClass.Search(IQuery Filter,bool Recycling)參數(shù)說明
          2011-07-19 8:32
          IFeatureClass的Search方法大家經(jīng)常用到,很多人對(duì)Search方法的其中一個(gè)參數(shù)bool Recycling不是很理解。
          目前網(wǎng)上關(guān)于這個(gè)參數(shù)的意義的解釋有兩個(gè)版本:
          1.第一版本是Isnotnull大牛的:
          http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=13461
          他提出的觀點(diǎn)的是:參數(shù)Recycling為True的時(shí)候是傳引用,為False的時(shí)候?yàn)閭髦?/span>
          2.第二個(gè)版本是Echo兄的:
          http://gis.cnblogs.com/home.aspx?page=3
          他提出的觀點(diǎn)是:參數(shù)Recycling為True的時(shí)候游標(biāo)對(duì)象(Ifeaturecursor)是只包含一條記錄,為False的時(shí)候游標(biāo)對(duì)象(Ifeaturecursor)為10條記錄(假設(shè)Featureclass有10條記錄)

          我經(jīng)過測(cè)試提出個(gè)人的觀點(diǎn):
          1.pFeatureCursor存儲(chǔ)的是所有符合條件的Feature對(duì)象的引用,
          2.Recycling的意思是回收,參數(shù)Recycling為True的時(shí)當(dāng)執(zhí)行這個(gè)方法IFeature pFeature=pFeatureCursor.NextFeature()上一條記錄的值在內(nèi)存中所占的地址就會(huì)被銷毀回收,為False的時(shí)候當(dāng)執(zhí)行這個(gè)方法IFeature pFeature=pFeatureCursor.NextFeature()上一條記錄的值依然存在在內(nèi)存中。
          Ok,接下來以實(shí)例證明本觀點(diǎn):

          1.參數(shù)Recycling設(shè)置為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集合存儲(chǔ)了指向FeatureClass上所有Feature的引用,但是由于Recycling參數(shù)設(shè)置為TRUE也就是說沒執(zhí)行一個(gè)NextFeautre方法上一條記錄的Feature值在內(nèi)存中被回收,所以到最后遍歷pFeatures集合的時(shí)候所有的IFeature引用指向的Feature對(duì)象都為Null。所以會(huì)引發(fā)一下錯(cuò)誤(如下圖所示):




          2.參數(shù)Recycling設(shè)置為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集合存儲(chǔ)了指向FeatureClass上所有Feature的引用,但是由于Recycling參數(shù)設(shè)置為False也就是說每執(zhí)行一個(gè)NextFeautre方法上一條記錄的Feature值在內(nèi)存中依然存在,所以到最后遍歷pFeatures集合的時(shí)候所有的 IFeature引用指向的Feature對(duì)象都依然存在。所以會(huì)執(zhí)行的很Happy(如下圖所示):

           

          posted on 2012-04-05 19:52 ** 閱讀(1818) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊(cè)

          收藏夾

          C#學(xué)習(xí)

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 阿拉善左旗| 绥江县| 肥西县| 泾阳县| 交口县| 博乐市| 许昌县| 九龙坡区| 昌宁县| 新平| 武隆县| 麟游县| 微博| 清徐县| 巴林右旗| 海宁市| 中方县| 化州市| 锦屏县| 雷波县| 夹江县| 长丰县| 牙克石市| 高碑店市| 梁平县| 泰和县| 固安县| 儋州市| 新津县| 襄汾县| 丘北县| 固始县| 包头市| 宁德市| 南川市| 安西县| 焉耆| 炉霍县| 关岭| 博湖县| 灵寿县|