c#数据表与一些通用集合性能

本文关键字:集合 性能 数据表 | 更新日期: 2023-09-27 18:17:20

我知道当我们插入/获取数据时,DataTable正在使用装箱/拆箱。例如,如果我们有非常大的数据量只包含int,那么使用某种通用的DataTable不是更快吗?让我们说MyDataTable<int>,这将避免装箱/拆箱开销?

c#数据表与一些通用集合性能

字符串是引用类型,所以没有装箱开销:它们永远不会装箱。然而,DataTable确实有很多开销——这是能够表示任意列模型以及约束、更改跟踪等的成本。为了获得最佳性能,POCO模型很难被击败。例如:

public class Customer {
    public int Id { get; set; }
    public string Name { get; set; }
    // ...
}

有很多orm和micro- orm可以使用这种类型的模型。

但是,请注意,在DataTable中,值存储在类型正确的数组中。整型数据存储在int[]中——这是通过将数据存储在列中而不是行中来实现的。装箱只发生在将数据放入/取出DataTable时。

您需要处理的主要问题是DataTable可以有任意数量的列,其中的每列可以是任何类型。如果每个列都有不同的类型,就不能泛化它。

避免装箱的一种方法是创建一个对象来表示每一行,而不是使用DataTable。确保对象对每个适当类型的列都有一个属性。然后,您可以使用这些对象的List(或其他数据结构)。

另一个选择,例如,如果您的数据完全是int值,则创建一个多维int数组(int[,] mydata = new int[10000,5];)。这样还可以避免整数的装箱。