ArcEngine 데이터 삭제 방법 및 성능 비교

4598 단어 ArcEngine
1. IFeatureCursor 커서 조회 후 두루 삭제
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) 를 사용하고 진도표를 추가하면 인터페이스가 매우 친밀합니다.

좋은 웹페이지 즐겨찾기