簡體   English   中英

避免在DbParameter.Value中裝箱?

[英]Avoid boxing in DbParameter.Value?

我正在使用ADO.NET來傳達一些數據庫,並在將DbParameter.Value屬性設置為value-type時搜索避免裝箱的方法。

有沒有辦法避免在DbParameter.Value拳擊?

謝謝。

你為什么要避免它? 在整個數據訪問層的上下文中,裝箱的性能成本可能幾乎為零。 單獨在線上序列化參數值可能是拳擊成本的100倍。 您是否看到了拳擊造成的性能問題?

我不這么認為。 如果在Reflector中檢查SqlParameter類的Value屬性,您將看到存儲值的內部字段也是object類型。 它沒有地方存儲整數或浮標或任何其他方式。

你不能避免使用盒裝值,但你可以避免實際的拳擊。 或者更確切地說,您可以更改拳擊發生的方式和時間。

您可以准備要在參數中使用的盒裝值,例如:

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

只要保留數組,就可以反復使用盒裝值,而不會導致更多的裝箱,並且在陣列不再使用之前不會收集它們。

拳擊確實引起任何性能問題是值得懷疑的,但現在你有辦法至少做一些真正的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM