ArcEngine 데이터 삭제 방법 및 성능 비교
4598 단어 ArcEngine
2. 커서를 업데이트하고 IFeatureCursor를 삭제합니다.DeleteFeature()
3、ITable.DeleteSearchedRows 삭제
4、 IDataset.Workspace.ExecuteSQL
1. 몇 가지 삭제 방법 코드 1.질의 결과에서 삭제
private
void
Delete1(IFeatureClass PFeatureclass)
{
IQueryFilter pQueryFilter
=
new
QueryFilterClass();
pQueryFilter.WhereClause
=
"
objectID<=
"
+
DeleteNum;
IFeatureCursor pFeatureCursor
=
PFeatureclass.Search(pQueryFilter,
false
);
IFeature pFeature
=
pFeatureCursor.NextFeature();
while
(pFeature
!=
null
)
{
pFeature.Delete();
pFeature
=
pFeatureCursor.NextFeature();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
2. 커서 삭제 업데이트
private void Delete2(IFeatureClass PFeatureclass)
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
IFeatureCursor pFeatureCursor = PFeatureclass.Update(pQueryFilter, false);
IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
pFeatureCursor.DeleteFeature();
pFeature = pFeatureCursor.NextFeature();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
3. Delete SearchedRows를 사용하여private void Delete4(IFeatureClass PFeatureclass) {IQueryFilter = new QueryFilterClass(), pQueryFilter.WhereClause = "objectID<="+ Deletenum; Itable pTable = PFeatureclass as Itable; pTable.DeleteSearchedRows(pQueryFilter); System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter); }4.ExecuteSQL 삭제private void Delete4(IFeatureClass PFeatureclass) {IDataset pDataset = PFeatureclass as IDataset, pDataset.Workspace.ExecuteSQL("delete from"+ PFeatureclass.AliassName + "where objectid<="+ Deletenum);}2. 테스트 성능과 비교 1, 동일한 데이터 조건, 2000개의 기록 삭제2, 테스트 코드IfeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer; IFeatureClass PFeatureClass = pFeatureLayer.FeatureClass; System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch(); MyWatch.Start(); Delete1(PFeatureClass) //Delete2(PFeatureClass); //Delete3(PFeatureClass); //Delete4(PFeatureClass); //Delete5(PFeatureClass); MyWatch.Stop(); MessageBox.Show("삭제 시간:"+ My Watch.elapsed Milliseconds.ToString() + "밀리초");3. 테스트 상황 테스트 방법 첫 번째 시간(단위 ms) 첫 번째 시간(단위 ms) 15214ms5735ms2299ms290Ms359ms28ms426ms26ms 3.
1. ExecuteSQL을 사용하여 가장 빨리 삭제하고 데이터베이스의 효율이 가장 높다.
2. DeleteSearchedRows와 ExecuteSQL은 대량 삭제에 속하고 성능이 비교적 좋다.
3. 검색 결과에서 삭제하는 것이 가장 느리다. 만약 당신이 이런 방법을 사용한다면 즉시 프로그램을 수정할 것이다. 왜냐하면 당신은 시간을 낭비하기 때문이다.
4、
작은 데이터 양의 기록 수가 500000개보다 적으면 Delete Searched Rows나 Execute SQL을 사용하십시오. 그렇지 않으면 업데이트 커서 삭제 (방법 2) 를 사용하고 진도표를 추가하면 인터페이스가 매우 친밀합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ArcEngine 개발: Ielement.Geometry 값이 예상 범위 내에 있지 않음 + 요소 그리기 코드IElement pEle = pLineEle as IElement; pEle.Geometry = pLn; pLn은 ILINe 대상입니다. 당연히 IGeometry 대상이라고 생각하고 값을 부여할 수 있습니다. 그 결...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.