Конференция "Начинающим" » навигация по TADOStoredProc... [D7]
 
  • istok (04.08.10 20:32) [0]
    TADOStoredProc вернул 26000 записей, навигация по ним (цикл с Next) работает оч медленно.
    т.е. если сделать пустой цикл перебирающий все записи, это займет секунд 10.

    есть ли варианты увеличения скорости навигации без уменьшения кол-ва записей?
  • sniknik © (04.08.10 20:39) [1]
    > есть ли варианты увеличения скорости навигации без уменьшения кол-ва записей?
    убрать ошибки в программе.
    и заменить TADOStoredProc на TADODataSet.

    первое для скорости, второе чтобы отвечали...
  • Anatoly Podgoretsky © (05.08.10 09:32) [2]
    Что ты соотворил с машиной.
  • Sergey13 © (05.08.10 10:10) [3]
    > [0] istok   (04.08.10 20:32)

    Еще как вариант. Если уж есть процедура на сервере, то почему бы и цикл с обработкой не организовать там же, не вытягивая все записи на клиента?
  • istok (05.08.10 11:29) [4]

    > первое для скорости, второе чтобы отвечали...


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

    простой цикл
    first
    while not eof do next;
    и дело именно в next, т.к. если заменить eof на аналог (самому считать записи), то всё равно 10сек бежит по 26К записей. при том что весь запрос длится 2сек и любые другие манипуляции с 26К объектами (из датасета гружу записи в свои объекты, потом отрисовываю) - меньше секунды.

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


    > Что ты соотворил с машиной.


    не понимать


    > Еще как вариант. Если уж есть процедура на сервере, то почему
    > бы и цикл с обработкой не организовать там же, не вытягивая
    > все записи на клиента?
    >
    >


    это построение отчета для большого периода времени при большом числе исходных данных. хочется чтоб работало как можно шустрее. при малых исходных данных конечно скорость уже не так критична. но то что всё оч быстро работает в скл и отрисовке и изза датасета, у которого всё в памяти, мы имеем тормоза - возмущает.
  • Sergey13 © (05.08.10 12:09) [5]
    > [4] istok   (05.08.10 11:29)
    > это построение отчета для большого периода времени при большом числе исходных данных

    Ну и? Тебе все 26000 строк надо напечатать? Или полстраницы с итоговыми цифирями?

    > мы имеем тормоза - возмущает.

    Вы имеете, а не мы. 8-)
  • sniknik © (05.08.10 12:41) [6]
    > ошибки там нет
    ошибки это не только синтаксические на которые указывает компилятор но и логические, и от незнания фигню писать...

    > , я замеряю скорость навигации по датасету и вижу что она очень низка.
    > простой цикл
    > first
    > while not eof do next;
    вот тут дело скорее всего в не отключенных контролах, возможно в типе курсора "серверный" и значит + работа сети при доставании очередных записей, может еще в обработке событий датасета которые отсутствуют в этом простом цикле, но тем не менее могут присутствовать (и влиять) в программе...

    > и дело именно в next,
    не делай поспешных выводов, и тебя не назовут идиотом.

    > может есть другие компоненты или подходы...
    велосипедов полно. но с ними также нужно уметь работать, а документированы они хуже.
  • istok (05.08.10 12:58) [7]

    > вот тут дело скорее всего в не отключенных контролах, возможно
    > в типе курсора "серверный" и значит + работа сети при доставании
    > очередных записей, может еще в обработке событий датасета
    > которые отсутствуют в этом простом цикле, но тем не менее
    > могут присутствовать (и влиять) в программе...


    да, DisableControls помог, нашли статью по теме: http://edn.embarcadero.com/kr/article/27790

    хотя контролов никаких на этот датасет не завязано, после DisableControls всё стало работать намного быстрее.
  • Anatoly Podgoretsky © (05.08.10 13:08) [8]
    > istok  (05.08.2010 11:29:04)  [4]

    Удали все и воссоздай по новому. Со старыми компонентами ты что то натворил.
  • Anatoly Podgoretsky © (05.08.10 13:10) [9]
    > istok  (05.08.2010 12:58:07)  [7]

    > DisableControls помог
    как бы противоречат
    > контролов никаких на этот датасет не завязано
    лруг другу.
  • istok (05.08.10 13:15) [10]
    а через RecordSet еще быстрее заработало)) теперь то что надо..


    > > DisableControls помог
    > как бы противоречат
    > > контролов никаких на этот датасет не завязано
    > лруг другу.



    > Удали все и воссоздай по новому. Со старыми компонентами
    > ты что то натворил.


    нет там контролов, адошные компоненты в коде создаются и уничтожаются (storedProc := TADOStoredProc.Create(nil);)
  • sniknik © (05.08.10 14:47) [11]
    Anatoly Podgoretsky ©   (05.08.10 13:10) [9]
    >> DisableControls помог
    > как бы противоречат
    не, там все нормально, проверки тоже время занимают, даже если того на, что проверяешь нету.
    при отключенных контролах такая проверка одна, а когда уже "прошло унутрь" то на каждый переход между записями... разница есть.
 
Конференция "Начинающим" » навигация по TADOStoredProc... [D7]
Есть новые Нет новых   [134434   +28][b:0][p:0]