[英]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.