Оптимизация чтения данных SQL - PullRequest
0 голосов
/ 10 августа 2009

Я использую средство чтения данных SQl для получения значения из базы данных SQL.

Язык VB.NET

Получив данные в ридер, я запускаю цикл while

   While reader.Read

      If reader.HasRows() Then

/* Proessing of data */

      End If

  End While

Я заметил, что цикл while обрабатывается очень долго, так как строк много. Есть ли лучший способ реализовать.

Пожалуйста, прокомментируйте: Должен ли я получить данные SQlDataReader в arraylists, а затем обрабатывать данные с помощью arraylists?

Algo:

 While reader.read

    /* Put data into Arraylists */

    End While

    for(arraylist row count)
    /*Process data*/
    end for

Ответы [ 3 ]

1 голос
/ 10 августа 2009

Бессмысленно проверять, есть ли в считывателе данных строки внутри цикла. Если строк нет, метод Read возвращает false, поэтому он не войдет в цикл, а при наличии строк метод HasRows возвращает true, даже если вы прочитали все строки. Удаление его сэкономит вам немного времени, но вряд ли будет заметно:

While reader.Read

  /* Proessing of data */

End While

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

1 голос
/ 10 августа 2009

Не могли бы вы поместить логику цикла в логику на основе SET в TSQL?

Таким образом, вместо того, чтобы перебирать каждую строку в коде, пусть СУБД выполнит его в TSQL. Это то, для чего СУБД предназначены и хороши в этом.

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

0 голосов
/ 10 августа 2009

Не думайте, что чтение данных из базы данных занимает много времени.
Вы можете измерить время, прошедшее в блоке кода VB, например:

startTime = Now
....
stopTime = Now
elapsedTime = stopTime.Subtract(startTime)

Сначала измерьте, а затем оптимизируйте то, что действительно требует времени.

(P.S. Если вы используете Team Studio, вы можете попробовать встроенный профилировщик.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...