避免在 DbParameter.Value 中装箱?

发布于 2024-08-18 06:39:35 字数 125 浏览 9 评论 0原文

我正在使用 ADO.NET 来通信一些数据库,并寻找一种在将 DbParameter.Value 属性设置为值类型时避免装箱的方法。

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

谢谢。

I'm using ADO.NET to communicate some db, and searching for a way to avoid boxing when setting the DbParameter.Value property to value-type.

Is there a way to avoid boxing in DbParameter.Value?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

時窥 2024-08-25 06:39:35

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

Why do you want to avoid it? The performance cost of boxing is probably next to nothing in the context of the overall data access layer. Serializing the parameter value on the wire alone is probably 100 times the cost of boxing. Are you seeing a performance problem attributable to boxing?

像极了他 2024-08-25 06:39:35

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

I don't think so. If you examine the Value property of the SqlParameter class in Reflector, you will see that the internal field where the value is stored is also of type object. There is no place for it to store ints or floats or whatever any other way.

半步萧音过轻尘 2024-08-25 06:39:35

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

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

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

只要保留数组,装箱值就可以反复使用而不会导致更多装箱,并且直到数组不再使用时才会收集它们。

拳击是否真的会导致任何性能问题值得怀疑,但现在您至少有办法进行一些实际测试。

You can't avoid using boxed values, but you can avoid the actual boxing. Or rather, you can change how and when the boxing occurs.

You can prepare boxed values to use in parameters, for example:

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

As long as you keep the array, the boxed values can be used over and over without causing any more boxing, and they will not be collected until the array goes out of use.

It's doubtful that boxing is really causing any performance problems, but now you have a way to do some real testing at least.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文