IMap.SelectFeature别乱用
在Arcgis Engine 开发查询且高亮的功能时,通常查到的代码是这样的:
IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, true); IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null) { /*** ... 其他业务代码 ... ***/ //高亮选中要素 axMapControl1.Map.SelectFeature((ILayer)pFeatureLayer, pFeature); pFeature = pFeatureCursor.NextFeature(); }
|
小数据量的时候这样做问题不太大,但是一旦遇到大数据(其实也不太大,十万条吧),axMapControl1.Map.SelectFeature(pLayer, pFeature)
这句代码会相当消耗时间,有多耗时呢,这么说吧,去掉这句十几秒,加上这句十几分钟。
那么遇到大数据量应该怎么办呢?用IFeatureSelection
,下面是示例代码:
IFeatureSelection pFSelection = pFeatureLayer as IFeatureSelection; pFSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet pSelectionset = pFSelection.SelectionSet; ICursor pCursor; pSelectionset.Search(null, true, out pCursor); IFeatureCursor pFeatCursor = pCursor as IFeatureCursor; IFeature pFeature=pFeatCursor.NextFeature(); while(pFeature != null) { /*** ... 其他业务代码 ... ***/ pFeature=pFeatCursor.NextFeature(); }
|
pFSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false)
这句代码会一次性高亮该层所有选中的要素,下面的代码都是为了实现其他业务的。
嗯,记录一下。