Заполнение табличного адаптера хранимой процедурой занимает значительно больше времени, чем выполнение хранимой процедуры в SQL - PullRequest
0 голосов
/ 09 февраля 2009

Я пытался заполнить свой ультракомбо-бокс данными, но это заняло значительное количество времени. Однако, когда я запускаю ту же хранимую процедуру с сервера SQL, это занимает относительно мало времени. Строка кода, на которой зацикливается программа:

SprocPatientsTableAdapter.Fill(Me.PatientsDataSet.sprocPatients, SelectedCustomerID)

Под значительной разницей во времени я подразумеваю разницу менее 5 секунд на сервере sql и более трех часов внутри программы.

Ответы [ 5 ]

1 голос
/ 09 февраля 2009

Смотрите мой (принятый) ответ на очень похожий вопрос.

1 голос
/ 09 февраля 2009

Попробуйте использовать SQL Server Profiler, чтобы увидеть, какой запрос ваша программа отправляет именно в базу данных. Вы можете увидеть некоторые другие параметры, которые влияют на запрос и резко замедляют его.

0 голосов
/ 17 февраля 2009

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

0 голосов
/ 09 февраля 2009

Для этого конкретного результата база данных отправляет 45 522 строки (~ 9,08 МБ)

Что касается большого вопроса о том, нужны ли нам все эти данные, нет, мы этого не делаем, и я утверждал, что один, пока я не прошел синий цвет в области чрезвычайно темных темно-синих цветов на моем лице, но почему-то это «критически важный» что мы получаем все (а не только то, что необходимо в данный момент). Первый признак того, что мы захватили больше, чем нам нужно, это то, что мы используем многоколоночный комбинированный список в первую очередь (потратил более 1 тыс., Просто чтобы получить этот один элемент управления), извините, разглагольствования.

Процесс такой: пользователь вводит свое имя пользователя и идентификатор -> выбирает больницу, которую он хочет просмотреть (и имеет к ней доступ) -> затем все пациенты в этой больнице, которые используют наш сервис, загружаются в автозаполнение ультракомбокса по номеру счета (скрыто). Ультракомбокс (многоколоночный) связан с несколькими другими текстовыми полями (фамилия, имя, отчество и т. Д.), Поэтому информация может быть отредактирована.

0 голосов
/ 09 февраля 2009

Насколько велик набор результатов, который он возвращает? Если вы отправляете 2,5 ГБ по проводам, сохраняете их в памяти и вращаетесь, чтобы заполнить коллекцию, тогда да, конечно, это будет медленно.

Я думаю, что главный вопрос заключается в следующем: действительно ли вы используете все данные, которые возвращаются? Скажите, пожалуйста, что вы не захватываете всю таблицу, затем фильтруете до семи строк и показывает ID и имя пользователя!

...