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) 編輯 收藏