C DataTable資料遍歷優化詳解

2022-09-26 01:30:10 字數 2315 閱讀 2021

我們在進行開發時,會經常使用datatable來儲存和運算元據,我發現在遍歷datatable並對資料進行刪除和新增操作時速度非常慢,查閱相關資料並測試在新增主鍵後可以使遍歷和操作速度提高很多:

測試**,測試的是我們向取出來資料滿足flag!=1條件的所有資料的後面新增一條資料(因為這條資料的一些字段值是根據前面的幾條滿足條件[「accid='」 + accid + 「' and y='」 + year + 「' and absid <= 」 + absid;]資料的值累加得到的)所以需要進行整個datatable的遍歷來計算新增:

public static void test2()

條", table.rows.count);

stopwatch watch2 = new stopwatch();

watch2.start();

datatable newtable = handleaccyear(table,true);

watch2.stop();

console.writeline("資料,遍歷操作時間:毫秒:,秒:", newtable.rows.count, watch2.elapsedmilliseconds, watch2.elapsedmilliseconds / 1000);

} conn.close();

}}填充資料到datatable的方法

public static datatable executedatatable(sqlcommand cmd)

private static datatable handleaccyear(datatable dt, bool iscurre

; if (dt.rows.count > 0)

datarow selectrow = dt.select(filter);

double debitlc = 0, debitqty = 0, creditlc = 0, creditqty = 0, debitfc = 0, creditfc = 0;

foreach (datarow item in selectrow)

}newrow["curdebitlc"] = debitlc;

newrow["curdebitqty"] = debitqty;

newrow["curcreditlc"] = creditlc;

newrow["curcreditqty"] = creditqty;

//newrow["curdebitlc"] = dt.compute("sum(yeardebitlc)", filter);

//newrow["curdebitqty"] = dt.compute("sum(yeardebitqty)", filter);

//newrow["curcreditlc"] = dt.compute("sum(yearcreditlc)", filter);

//newrow["curcreditqty"] = dt.compute("sum(yearcreditqty)", filter);

if (!iscurrency)

程式設計客棧

newdt.rows.add(sourcerow);

newdt.rows.add(newrow);

}else

}} return newdt;

}當不使用主鍵進行遍歷計算插入相應的值時所用時間竟然是這麼多:

當我使用同樣的方法,同樣的資料新增主鍵(即把handleaccyear方法中不使用主鍵下面的注釋去掉後).進行遍歷計算等操作,得出的結果竟然有這麼大的差別:

補充:c# datatable資料量大,迴圈處理資料的時候優化速度

相信大家用for迴圈datatable資料的不會太少,這個在資料量比較小的時候可以接受,但是資料量大的時候卻會造成cpu占用過高,甚至把電腦資源耗盡卡死至無限等待,

其實一些迴圈耗時的操作可以用執行緒池分塊來處理,這樣會減輕cpu很多壓力,好比食堂打飯,當只有乙個視窗的時候勢必等待的時間會非常的長,但是多開幾個視窗的時候卻大大提高效率,

c#中用執行緒池就可以做到,本來一開始的時候我用的是為每個區塊開乙個執行緒,但是有乙個問題就是開了那麼多的執行緒沒辦法結束他們,後來我想到了執行緒池,

具體**如下:

int sid = dt.rows.count % 100 == 0 ? (dt.rows.count / 100) : (dt.rows.count / 100 + 1);

for (int a = 1; a <= sid; a++)

public void todo(object aa)

thread.sleep(2000);

}本文標題: c# datatable資料遍歷優化詳解

本文位址:

C DataTable 快速匯入資料庫

摘自 using system using system.collections.generic using system.linq using system.text using system.data using system.data.sqlclient using system.config...

c datatable根據某個條件過濾資料

判斷datatable中某一行某列的資料為空值的辦法 需要使用datarow類自帶的乙個函式isnull。if datarow.isnull index if convert.isdbnull row.itemarray index 在datareader 如sqldatareader 有相同功能的...

資料庫調優之主機調優

學習資料庫需要對很多東西要理解,包括主機,儲存,資料庫,開發。特別調優。因此,資料庫設計的知識還是比較廣的,這篇文章主要是講解一下主機調優。我遇到過一些關於主機引起的資料庫問題,比如資料庫開啟後,資料庫的效能還可以,但是隨著時間增長,主機的記憶體就會耗得很多,資料庫就會變慢 還有就是io繁忙程度10...