2010-03-03 2 views
0

Класс SqlDataReader предлагает метод GetValues. То, что мне интересно, это то, что он принимает object[] в качестве входных данных и возвращает int количество значений, скопированных в массив.Почему GetValues ​​принимает массив объектов в качестве ввода, а не возвращает новый массив.

Любая идея, почему метод был разработан таким образом, вместо того, чтобы возвращать новый массив?

ответ

2

According to the documentation:

Вы можете передать массив объектов, который содержит меньше, чем число столбцов, содержащихся в полученной строке. Только массив данных, хранящихся в массиве Object, копируется в массив. Вы также можете передать массив Object, длина которого больше, чем количество столбцов, содержащихся в полученной строке.

Это позволяет вызывающему абоненту полностью контролировать распределение памяти, а также легко контролировать количество запрошенных колонок.

+0

достаточно справедливо, однако почему бы не передать целое число в качестве предельного значения и вернуть объект [] этой длины. объект [] myValues ​​= sqlDataReader.GetValues ​​(3); –

+1

@Ralph: ключ заключается в том, что вызывающий абонент управляет распределением памяти. Если функция возвращает массив, то это использование памяти контрольной памяти. Один конкретный пример - повторное использование одного и того же массива для каждой строки, а не получение нового массива для каждой строки. –

+0

@John: Думаю, я ожидаю, что GetValues ​​() будет вести себя как Directory.GetFiles (pattern); Вы возвращаете массив строк. Теперь в этом случае у них нет выбора, поскольку вызывающий может не знать, сколько файлов возвратит метод, что технически не так с sqldatareader. –

3

Просто догадайтесь, но, пройдя массив, вы можете повторно использовать один и тот же массив снова и снова. Создание массива требует времени. Не так много времени, но если вы повторяете миллионы результатов, это может быть измеримым усилением производительности за счет повторного использования одного и того же массива. Создание нового массива каждый раз также вызовет необходимость в работе GC.

Смежные вопросы