Я использую ADO.NET для связи с некоторыми db и ищет способ избежать бокса при установке свойства DbParameter.Value в тип значения.
Есть ли способ избежать бокса в DbParameter.Value?
Спасибо.
Я так не думаю. Если вы изучите свойство Value класса SqlParameter в Reflector, вы увидите, что внутреннее поле, в котором хранится значение, также относится к типу объекта. Там нет места для хранения ints или floats или каким-либо другим способом.
Почему вы хотите избежать этого? Стоимость работы бокса, вероятно, почти ничего не стоит в контексте общего уровня доступа к данным. Сериализация значения параметра только на проводе, вероятно, в 100 раз превышает стоимость бокса. Вы видите проблему с производительностью, связанную с боксом?
Вы не можете избежать использования вложенных значений, но вы можете избежать фактического бокса. Вернее, вы можете изменить, как и когда происходит бокс.
Вы можете подготовить значения в боксе для использования в параметрах, например:
object[] boxedIntegers = new object[100];
for (int i = 0; i < boxedIntegers.Length; i++) {
boxedIntegers[i] = i;
}
Пока вы храните массив, значения в коробке могут использоваться снова и снова, не вызывая больше бокса, и они не будут собраны до тех пор, пока массив не выйдет из употребления.
Сомнительно, что бокс действительно вызывает проблемы с производительностью, но теперь у вас есть способ провести какое-то реальное тестирование по крайней мере.