我知道当我们插入/获取数据时DataTable
正在使用装箱/取消装箱。例如,如果我们有大量数据仅包含int
,那么使用某种通用DataTable
是不是更快,让我们说MyDataTable<int>
,这将导致避免装箱/拆箱开销?
答案 0 :(得分:3)
字符串是引用类型,因此没有拳击开销:它们永远不会被装箱。 DataTable确实有很多开销 - 这是能够代表任意列模型以及约束,变更跟踪等的成本。为了获得最佳性能,POCO模型很难被击败。例如:
public class Customer {
public int Id { get; set; }
public string Name { get; set; }
// ...
}
有很多ORM和微型ORM可以使用这种模型。
但请注意,在DataTable中,值存储在正确类型的数组中。 Ints存储在int []中 - 这是通过将数据存储在列而不是行中来实现的。拳击仅在将数据输入/输出DataTable时发生。
答案 1 :(得分:2)
您需要处理的主要问题是DataTable
可以包含任意数量的列,其中每列可以是任何类型。您不能对它进行泛化,同时每列仍有不同的类型。
避免装箱的一种方法是,而不是使用DataTable
,创建一个对象来表示每一行。确保对象具有适当类型的每个列的属性。然后,您可以使用这些对象的List
(或其他一些数据结构)。
如果您的数据具有完全int
值,则另一个选项是创建一个多维的整数数组(int[,] mydata = new int[10000,5];
)。这也可以避免装箱整数。