Еще одна распространенная ошибка - забыть написать [someInstance setSomeValue : 3]; вместо [someInstance someValue: 3] (< - неправильно). Это то, что случилось со мной.
Сброс просто сбрасывает вещи, так что вам не нужно повторно подключать для их сброса. Он очищает соединение от таких вещей, как операции SET или USE, поэтому каждый запрос остается чистым.
Соединение все еще используется повторно. Вот расширенный список :
sp_reset_connection сбрасывает следующие аспекты соединения: уменьшить счетчик ссылок для пользователей в текущей базе данных; освобождает блокировку разделяемой базы данных
sp_reset_connection НЕ сбрасывает:
Вот объяснение Что делает sp_reset_connection? , в котором, в частности, говорится: «Уровни API доступа к данным, такие как ODBC, OLE-DB и SqlClient, вызывают (внутреннюю) хранимую процедуру sp_reset_connection при повторном использовании соединения из пула соединений. Это делается для сброса состояния соединения перед его повторным использованием ». Затем он дает некоторые особенности того, что делает этот системный sproc. Это хорошо.
sp_resetconnection будет вызываться каждый раз, когда вы запрашиваете новое соединение из пула. Он должен это сделать, поскольку пул не может гарантировать пользователя (вы, вероятно, программист :) оставили соединение в надлежащем состоянии. например, возвращать старое соединение с незавершенными транзакциями было бы .. плохо.
Число вызовов должно быть связано с числом раз, когда вы выбираете новое соединение.
Что касается некоторых вызовов, занимающих нетривиальное количество времени, Я не уверен. Возможно, в это время сервер просто очень занят обработкой других вещей. Возможны задержки в сети.
В основном вызовы представляют собой информацию о состоянии очистки. Если у вас есть ЛЮБЫЕ открытые устройства чтения данных, это займет НАМНОГО больше времени. Это потому, что ваши DataReaders содержат только одну строку, но могут вытащить больше строк. Каждый из них также должен быть очищен, прежде чем можно будет продолжить сброс. Поэтому убедитесь, что у вас есть все в операторах using (), и что в некоторых из ваших операторов ничего не остается открытым.
Сколько всего подключений у вас запущено, когда это происходит?
Если у вас максимум 5 и вы нажмите все 5, затем вызов сброса заблокирует - и, похоже, это займет много времени. На самом деле это не так, это просто заблокировано, ожидая, когда объединенное соединение станет доступным.
Также, если вы работаете в SQL Express, вы можете очень легко заблокироваться из-за требований к потокам (также может произойти в полном SQL Server,