zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# DataSet性能最佳实践

c#性能 实践 最佳 Dataset
2023-09-14 09:02:10 时间
在对DataRow的所有字段赋值时,使用字段名进行逐列赋值效率较低。这时应尽量使用批量字段赋值。可以使用ItemArray或rows.Add方法:/ ds是数据集(DataSet)对象 DataTable dt = ds.Tables[0]; DataRow row = dt.NewRow(); row.Item

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 //未使用并行计算

IEnumerable DataRow FindRows() //查找所有数量小于0的分录

 DataTable dt = ItemDataTable;

 int index = dt.Columns.IndexOf("Quantity");

 return dt.AsEnumerable().AsParallel().Where(dr = (decimal)dr[index] //使用并行计算:

}

根据实验,当对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 ) ; 

}

【Paper Reading】PolarDB计算存储分离架构性能优化之路 本篇论文收录在 VLDB 2022,介绍了云原生数据库PolarDB在计算存储分离架构下遇到的性能挑战,分析了云存储相对于传统本地存储的工作特性差异及其根因,讨论了将各类存储引擎部署至云存储上时所会遇到的问题挑战,并提出了统一的优化框架 CloudJump。最后通过实验证明优化框架CloudJump适用于PolarDB,也适用于 RocksDB。
Pandas+ SLS SQL:融合灵活性和高性能的数据透视 Pandas是一个十分强大的python数据分析工具,也是各种数据建模的标准工具。Pandas擅长处理数字型数据和时间序列数据。Pandas的第一大优势在于,封装了一些复杂的代码实现过程,只需要调用接口就行了,避免了编写大量的代码。Pandas的第二大优势在于灵活性,可以实现自动化批量化处理复杂的逻辑,这些工作是Excel等工具是无法完成的。因而Pandas介于Excel和自主编写程序之间,兼具灵活性和简洁性的数据分析工具。