首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

延遲 DataTable Expression 列計算提升 Fill 效能

     編輯:關於.NET

使用非強型 DataSet 時,含 Expression 列的 DataTable 可先 Fill 再加入運算列再繫結,提升效能。但強型 DataSet 已預先定義運算列,需另闢蹊徑。

解決策略:暫存並清空 Expression,Fill 後恢復

  1. 遍歷 DataTable.Columns,將 Expression 非空的列名與運算式存入 Hashtable,並將 Expression 設為空字串。
  2. 呼叫 TableAdapter.Fill。
  3. 再次遍歷,若 Hashtable 含鍵值,恢復 Expression,最後清空 Hashtable。
Hashtable exprKey = new Hashtable();
for (int i = 0; i < targetTable.Columns.Count; i++) {
    if (targetTable.Columns[i].Expression != string.Empty) {
        exprKey.Add(targetTable.Columns[i].ColumnName, targetTable.Columns[i].Expression);
        targetTable.Columns[i].Expression = string.Empty;
    }
}
tableAdapter.Fill(targetTable);
for (int i = 0; i < targetTable.Columns.Count; i++) {
    if (exprKey.ContainsKey(targetTable.Columns[i].ColumnName)) {
        targetTable.Columns[i].Expression = (string)exprKey[targetTable.Columns[i].ColumnName];
    }
}
exprKey.Clear();

實測結果

使用 Northwind Order Details 表(約 2000 筆),加入 ItemTotal = UnitPrice * Quantity 運算列。測試效能提升約 30%。
DataTable 結構

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved