我正在使用ADO.NET来传达一些数据库,并在将DbParameter.Value属性设置为value-type时搜索避免装箱的方法。
有没有办法避免在DbParameter.Value中装箱?
感谢。
答案 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;
}
只要你保留数组,盒装的值就可以反复使用而不会引起任何限制,并且在数组不再使用之前不会收集它们。
拳击确实引起任何性能问题是值得怀疑的,但现在你有办法至少做一些真正的测试。