避免在DbParameter.Value中装箱?

时间:2010-01-16 20:38:43

标签: c# .net performance ado.net boxing

我正在使用ADO.NET来传达一些数据库,并在将DbParameter.Value属性设置为value-type时搜索避免装箱的方法。

有没有办法避免在DbParameter.Value中装箱?

感谢。

3 个答案:

答案 0 :(得分:7)

你为什么要避免它?在整个数据访问层的上下文中,装箱的性能成本可能几乎为零。单独在线上序列化参数值可能是拳击成本的100倍。您是否看到了拳击造成的性能问题?

答案 1 :(得分:2)

我不这么认为。如果在Reflector中检查SqlParameter类的Value属性,您将看到存储值的内部字段也是object类型。它没有地方存储整数或浮标或任何其他方式。

答案 2 :(得分:2)

您无法避免使用盒装值,但可以避免实际装箱。或者更确切地说,你可以改变拳击发生的方式和时间。

您可以准备要在参数中使用的盒装值,例如:

object[] boxedIntegers = new object[100];
for (int i = 0; i < boxedIntegers.Length; i++) {
   boxedIntegers[i] = i;
}

只要你保留数组,盒装的值就可以反复使用而不会引起任何限制,并且在数组不再使用之前不会收集它们。

拳击确实引起任何性能问题是值得怀疑的,但现在你有办法至少做一些真正的测试。