Hopes

          Start Here..

           

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

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

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

          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。所以會引發一下錯誤(如下圖所示):




          2.參數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(如下圖所示):

           

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 凯里市| 临邑县| 揭阳市| 喀喇| 林周县| 鄂州市| 桦南县| 桃源县| 满洲里市| 兴安盟| 来凤县| 镇原县| 佛学| 松桃| 方山县| 永靖县| 中山市| 雷州市| 凉城县| 彭阳县| 南投县| 茂名市| 石林| 巫山县| 乐亭县| 盐源县| 宜兴市| 陆丰市| 邢台市| 金沙县| 晋中市| 黄平县| 额敏县| 武义县| 沙坪坝区| 兰坪| 麦盖提县| 怀来县| 饶阳县| 绍兴市| 玉山县|