我正在使用 ADO.NET 与一些数据库进行通信,并在将 DbParameter.Value 属性设置为值类型时寻找一种避免装箱的方法。
有没有办法避免在 DbParameter.Value 中装箱?
谢谢。
我正在使用 ADO.NET 与一些数据库进行通信,并在将 DbParameter.Value 属性设置为值类型时寻找一种避免装箱的方法。
有没有办法避免在 DbParameter.Value 中装箱?
谢谢。
为什么要避免它?在整个数据访问层的上下文中,装箱的性能成本可能几乎为零。仅在线路上序列化参数值可能是装箱成本的 100 倍。您是否看到了归因于拳击的性能问题?
我不这么认为。如果你在 Reflector 中检查 SqlParameter 类的 Value 属性,你会发现存储值的内部字段也是 object 类型的。它没有地方存储整数或浮点数或任何其他方式。
您无法避免使用装箱值,但可以避免实际装箱。或者更确切地说,您可以更改拳击发生的方式和时间。
您可以准备装箱值以在参数中使用,例如:
object[] boxedIntegers = new object[100];
for (int i = 0; i < boxedIntegers.Length; i++) {
boxedIntegers[i] = i;
}
只要保留数组,装箱后的值就可以反复使用而不会造成任何装箱,并且在数组停止使用之前不会收集它们。
拳击是否真的会导致任何性能问题是值得怀疑的,但现在您至少可以进行一些真正的测试。