engine 刪除FeatureClass 方法

2021-10-04 17:04:27 字數 2672 閱讀 7102

一、幾種刪除方法**

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.  使用deletesearchedrows刪除

private void delete4(ifeatureclass pfeatureclass)

iqueryfilter pqueryfilter = 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.aliasname + " where objectid<=" + deletenum);

二、  測試效能和比較

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();

3、       測試情況

測試方法

第一次時間(單位ms)

第一次時間(單位ms)

5214ms

5735ms

299ms

290ms

59ms

28ms

26ms

26ms

三、  結論

1、         使用executesql刪除最快,資料庫的效率最高。

2、         deletesearchedrows和executesql屬於批量刪除,效能較優。

3、         查詢結果中刪除,速度最慢,如果你使用這種方法,建立你馬上修改你的程式,因為你在浪費時間。

4、       小資料量記錄數小於500000條,請使用deletesearchedrows或executesql,否則使用更新游標刪除(方法2),加上進度條,這樣介面很友好。

新增 複製 刪除feature

1 插入 向featureclass中批量插入features 批量插入features,用buffer的方法,要比迴圈乙個個store的方法快 運算元據所在的ifeatureclass private void insertfeatures ifeatureclass pfeatureclass ...

OGR C 刪除指定路徑Feature

根據指定shp檔案的路徑清理feature,也就是shp資料的屬性資訊,但保留表頭 private void delete click object sender,eventargs e console.writeline olayer.getname tostring 這一步是必須的,重新整理資料...

十七 Feature分支

軟體開發中,總有無窮無盡的新的功能要不斷新增進來。新增乙個新功能時,你肯定不希望因為一些實驗性質的 把主分支搞亂了,所以,每新增乙個新功能,最好新建乙個feature分支,在上面開發,完成後,合併,最後,刪除該feature分支。現在,你終於接到了乙個新任務 開發代號為vulcan的新功能,該功能計...