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)这句代码会一次性高亮该层所有选中的要素,下面的代码都是为了实现其他业务的。

嗯,记录一下。

加载评论框需要翻墙