If I shield the first search, the finally time is about 50ms, but if I don't shiled the first search, the finally time is more than 1000ms, the key is the variable "ipFeatureCursor", it seems that Repeatedly Search result in low Efficiency
IFeatureClassPtr ipFeatureClass;
hr = ipFeatureWorkspace->OpenFeatureClass(CComBSTR("POINT"), &ipFeatureClass);
IQueryFilterPtr ipQueryFilter(CLSID_SpatialFilter);
ISpatialFilterPtr ipSpatialFilter;
ipSpatialFilter = ipQueryFilter;
IEnvelopePtr ipEnvelope(CLSID_Envelope);
hr = ipEnvelope->PutCoords(418500,143700,418950,144000);
hr = ipSpatialFilter->putref_Geometry(IGeometryPtr(ipEnvelope));
hr = ipSpatialFilter->put_SpatialRel(esriSpatialRelEnvelopeIntersects);
BSTR strFieldName;
hr = ipFeatureClass->get_ShapeFieldName(&strFieldName);
hr = ipSpatialFilter->put_GeometryField(strFieldName);
IFeatureCursorPtr ipFeatureCursor;
hr = ipFeatureClass->Search(ipQueryFilter, VARIANT_FALSE, &ipFeatureCursor); //The firsrt Search
IEnvelopePtr ipEnvelope2(CLSID_Envelope);
hr = ipEnvelope2->PutCoords(418770,143850,418790,143890);
hr = ipSpatialFilter->putref_Geometry(IGeometryPtr(ipEnvelope2));
hr = ipSpatialFilter->put_GeometryField(strFieldName);
hr = ipSpatialFilter->put_SpatialRel(esriSpatialRelEnvelopeIntersects);
DWORD dStart = GetTickCount();
hr = ipFeatureClass->Search(ipQueryFilter, VARIANT_FALSE, &ipFeatureCursor);
IFeaturePtr ipFeature;
long lCount = 0;
hr = ipFeatureCursor->NextFeature(&ipFeature);
while (hr == S_OK)
{
hr = ipFeatureCursor->NextFeature(&ipFeature);
lCount++;
}
DWORD dEnd = GetTickCount();
DWORD dValue = dEnd - dStart;
CString str;
str.Format("%ld,Countï¼?%ld", dValue, lCount);
AfxMessageBox(str);