您好,欢迎访问一九零五行业门户网

C# DataSet性能最佳实践

c# 性能优化细节
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,起到优化效率的作用。
ienumerable<datarow> findrows() //查找所有数量小于0的分录 { datatable dt = itemdatatable; …… return dt.select(“quantity<0”); //未使用并行计算 } ienumerable<datarow> 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 ) ; } }
4、待续
以上就是c# dataset性能最佳实践的内容。
其它类似信息

推荐信息