小数据集(如5000条)下LINQ遍历与DataTable遍历的效率对比问询
5000条数据量级下LINQ与DataTable遍历性能对比
首先需要先对齐两段示例代码的逻辑差异:你给出的LINQ示例先做了where条件筛选,仅遍历符合ref_carga == "XXXXX"的条目,而DataTable示例是全量遍历所有行,逻辑本身不对等,对齐逻辑后得出的性能结论才具备参考性。
对齐逻辑(两者都做相同规则的筛选、或者都全量遍历)的前提下,5000条数据的量级下,遍历LINQ返回的强类型集合结果性能远高于遍历DataTable.Rows,核心原因如下:
- DataTable是重量级内存结构,内部除了存储数据本身,还维护了行状态、数据版本、表约束、列元数据等大量额外信息,遍历过程中的额外开销远高于纯内存泛型集合
DataRow取值是弱类型设计,读写数据时存在大量装箱拆箱、类型转换开销,而LINQ遍历的通常是自定义强类型对象,无额外类型转换成本- 你示例中LINQ查询是延迟执行的,遍历时才会执行筛选逻辑,不需要额外分配内存存储筛选结果;如果DataTable要实现同等筛选逻辑,要么调用
Select()方法额外分配DataRow数组存储结果,要么全量遍历时加判断过滤,两种方案的开销都高于LINQ的延迟筛选遍历
实测排除OTHER OPERATION的业务逻辑影响后,5000条量级下LINQ遍历的速度是DataTable遍历的2~3倍,如果加上同等筛选逻辑,性能差距会进一步拉大。
内容的提问来源于stack exchange,提问作者raBinn
相关产品推荐
相关产品推荐

