SqlDataReader Close занимает более 10 секунд - почему?

У меня есть случай, когда при довольно регулярном выборе вызов SqlDataReader.Close() занимает более 10 секунд для возврата. Единственное, что необычно, это то, что выбор возвращает 20 строк, но в этом случае ни одна из строк не читается.

DbDataReader reader = (DbDataReader) cmd.ExecuteReader(CommandBehavior.Default);
reader.MoveNext();
var row = de.Current;

// lots of other code that does not touch this.
reader.Close();

Почему это занимает так много времени? И что еще более важно, что я могу сделать, чтобы сделать это быстро?


person David Thielen    schedule 14.11.2012    source источник
comment
это длинный запрос, который требует много обработки?   -  person Fallenreaper    schedule 14.11.2012
comment
Все заказы в Northwind так что ничего сложного и не так уж и долго. Кроме того, Close() требует времени.   -  person David Thielen    schedule 15.11.2012
comment
вы устанавливаете таймер вокруг reader.Close(); подтвердить? Я думаю, что что-то ждет завершения, прежде чем оно будет закрыто.   -  person Fallenreaper    schedule 15.11.2012
comment
Сначала я использовал dotTrace, чтобы найти его. Но затем я установил точку останова на вызове, и когда я сказал отладчику перешагнуть, это заняло 10 секунд. У меня нет других тем, затрагивающих это.   -  person David Thielen    schedule 15.11.2012


Ответы (1)


Я не мог понять, что/почему это происходит. Итак, при вызове закрыть мой объект я создаю рабочий поток и закрываю считыватель данных и соединение. Затем я немедленно возвращаюсь, чтобы пользователь не заметил задержки. Работает отлично.

Обновление: согласно SqlDataReader.Close() его можно уменьшить, вызвав метод Cancel связанного объекта SqlCommand перед вызовом метода Close. h/t Лингарадж Мишра

person David Thielen    schedule 14.11.2012