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