c#数据表与一些通用集合性能
本文关键字:集合 性能 数据表 | 更新日期: 2023-09-27 18:17:20
我知道当我们插入/获取数据时,DataTable
正在使用装箱/拆箱。例如,如果我们有非常大的数据量只包含int
,那么使用某种通用的DataTable
不是更快吗?让我们说MyDataTable<int>
,这将避免装箱/拆箱开销?
字符串是引用类型,所以没有装箱开销:它们永远不会装箱。然而,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];
)。这样还可以避免整数的装箱。