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