1、使用ItemArray實現對DataRow的批量賦值
在對DataRow的所有字段賦值時,使用字段名進行逐列賦值效率較低。這時應盡量使用批量字段賦值。可以使用ItemArray或rows.Add方法:
/ ds是數據集(DataSet)對象
DataTable dt = ds.Tables[0];
DataRow row = dt.NewRow();
row.ItemArray = new object[] { value1, value2, …, valuen };
// ds是數據集(DataSet)對象
DataTable dt = ds.Tables[0];
dt.Rows.Add(value1, value2, …, valuen);
//應避免做大量連續的單列賦值,如下:
DataTable dt = ds.Tables[0];
DataRow row = dt.NewRow();
row[col1] = value1;
row[col2] = value2;
…
row[coln] = valuen;
2、合理使用DataTable的並行計算
DataTable 內置的並行計算可以充分利用電腦的每個CPU,起到優化效率的作用。
IEnumerableFindRows() //查找所有數量小於0的分錄 { DataTable dt = ItemDataTable; …… return dt.Select(“Quantity<0”); //未使用並行計算 } IEnumerable FindRows() //查找所有數量小於0的分錄 { DataTable dt = ItemDataTable; …… int index = dt.Columns.IndexOf(Quantity); return dt.AsEnumerable().AsParallel().Where(dr => (decimal)dr[index] < 0); //使用並行計算: }
根據實驗,當對DataTable的行選擇時並行計算優於Select和循環過濾等方式;當進行行遍歷時性能類似。
3、使用ImportRow實現向同結構DataTable合並
使用Merge方法可以很方便的實現DataTable的合並,但Merge的效率卻非常差代碼;示例如下:
DataTable[] srcTables = ... ;
foreach(DataTable src in srcTables )
{
dest.Merge( src ) ;
}
ImportRow也可以實現DataTable的合並操作,性能相比Merge要高很多。代碼示例如下:
DataTable[] srcTables = ... ;
foreach(DataTable src in srcTables )
{
foreach(DataRow row in src.Rows)
{
dest.ImportRow( row ) ;
}
}