Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
White Owl, Мы с тобой говорим о разных вещах, воспользовавшись, к сожалению, одним термином. Ты говоришь об adAsyncExecute, говоришь все правильно и подробно. И с точки зрения самой команды Open и VB - да, описанный мной случай будет выполнен синхронно. Давай я возьму назад слово "асинхронно", заменив его на "многопоточно". Единственное, что противоречит моему пониманию происходящих процессов, это твое "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную строку" . Я не уверен, что это происходит именно так, что данные не подкачиваются, пока я, скажем, ушел в затуп и вообще не делаю MoveNext. Но доказать это не могу, надо провести серию экспериментов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 18:45 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную > строку". Я не уверен, что это происходит именно так На клиенте при запросе создается буфер и при выполнеии запросы этот буфер заполняется, как только он заполнился, данные не тянутся. Остальное на сервере ждет своего звездного часа :) . Именно по MoveNext происходит запрос, а не в бекграудне, ты можешь вообще никуда не пойти, а просто посмотреть и закрыть рекордсет. Так зачем делать лишнее Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 18:51 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Ок. Ладно. Век живи - век учись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 18:53 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Shocker.ProЕдинственное, что противоречит моему пониманию происходящих процессов, это твое "подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную строку" . Я не уверен, что это происходит именно так, что данные не подкачиваются, пока я, скажем, ушел в затуп и вообще не делаю MoveNext. Но доказать это не могу, надо провести серию экспериментов.Это и верно и неверно одновременно :) С точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу. А с точки зрения VB* выкачивает драйвер строки пачками или по одной - никакой разницы нет. С уровня VB ты никогда не сможешь добраться до драйверного буфера и как-либо его использовать. Принцип тут тот же что и с буферизированым чтением из файла. Осознание того факта что харддрайв не дергается за каждым байтом а читает данные покластерно, греет душу, но не заставляет тебя менять алгоритм побайтового чтения файла на блочный. Совсем другое дело синхронный или асинхронный доступ к БД. Использование того или другого означает что ты будешь писать программу в двух разных стилях. Поэтому я и возмутился на необдуманное использование слова "асинхронный". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 19:46 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
White OwlС точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу. Ну тут у меня было непонимание только в одном: предположим, я сделал разок MoveNext и ушел в затуп. Будет ли в это время происходить докачка? Я полагал, что будет. Игорь привел железный аргумент, после которого я решил согласиться с вами без проверки. ---------------- Есть один интересный нюанс. Я пока ему беспощадную войну не объявлял, а мелкие попытки нивелирования ни к чему ни привели. При Forward-курсоре я начинаю чтение и обработку данных и вдруг бросаю (пользователь прервал процесс). Делаю на рекордсете и на комманде всякие Cancel, Close, Nothing, однако, пока эта сволочь полностью не заберет недобранные данные с сервера - управление мне не возвращается. Особенно заметно при работе через интернет - если данных было много, приложение затупливает на несколько секунд и трафик виден. Если данных при тех же условиях было меньше или дело происходит в локалке - отменяется гораздо быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 19:58 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Shocker.ProWhite OwlС точки зрения реальной нагрузки на сеть, клиент действительно чаще всего перекачивает записи по нескольку штук за раз. Если ты заглянешь в настройки интерфейсного драйвера ты возможно сможешь найти там что-нибудь типа Fetch Array Size. Но большинство драйверов не позволяют контролировать размер пакета или просто не афишируют это свойство в настройках доступных рядовому админу. Ну тут у меня было непонимание только в одном: предположим, я сделал разок MoveNext и ушел в затуп. Будет ли в это время происходить докачка?Ответ: Возможно. Я не могу дать более точного ответа. Это все зависит от конкретной версии интерфейса и реализации интерфейсного драйвера. До тех пор пока ты не сделаешь очередной MoveNext данные точно не попадут в память твоей программы, но попадут они в память интерфейсного драйвера на клиентской машине или нет - без копания в исходниках драйвера сказать обычно нельзя. Shocker.ProПри Forward-курсоре я начинаю чтение и обработку данных и вдруг бросаю (пользователь прервал процесс). Делаю на рекордсете и на комманде всякие Cancel, Close, Nothing, однако, пока эта сволочь полностью не заберет недобранные данные с сервера - управление мне не возвращается. Особенно заметно при работе через интернет - если данных было много, приложение затупливает на несколько секунд и трафик виден. Если данных при тех же условиях было меньше или дело происходит в локалке - отменяется гораздо быстрее.Да, это возможно. Опять таки повторюсь: все зависит от конкретной реализации интерфейса. Вполне возможно что клиентский драйвер действительно будет тянуть остатки резалтсета даже если его отменили. Стандартов на реализацию этого момента нет и каждый делает как ему кажется лучшим. В конце-концов "выбрать все и забыть" тоже можно считать "отменой". А вообще, смотри как организуется обмен по TCP - одна сторона пихает в свой конец туннеля, потом читает, снова пихает, снова читает... Если сервер считает что он должен запихать в туннель вот такой-то объем данных, клиент не может его прервать и сказать "хватит". В принципе не может. Только если сервер посылает данные блоками и между каждым блоком слушает "а не просят ли меня остановится", только тогда возможно прерывание посылки... И я совсем не уверен что подставь_свою_СУБД делает именно это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 20:37 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
White OwlИ я совсем не уверен что подставь_свою_СУБД делает именно это. MSSQL/OLEDB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 20:39 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
вот повыдерал из проекта, разбирайтесь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:06 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Konst_One, Ну у меня примерно так же, только я ловлю события от коннекшна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:25 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Shocker.ProKonst_One, Ну у меня примерно так же, только я ловлю события от коннекшна. в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:28 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Konst_OneShocker.ProKonst_One, Ну у меня примерно так же, только я ловлю события от коннекшна. в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection) Я не очень понял, к чему ты это. Я асинхронно запрашиваю рекордсет их хранимки через Command, и меня интересует только момент его поступления. Обработку рекордсета я делаю, перемежая его DoEvents-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:31 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Shocker.ProKonst_OneShocker.ProKonst_One, Ну у меня примерно так же, только я ловлю события от коннекшна. в режиме ассинхронного рекордсета не блокируется форма с гридом, в котором он находится. и не надо делать ассинхронное соединение (ADODB.Connection) Я не очень понял, к чему ты это. Я асинхронно запрашиваю рекордсет их хранимки через Command, и меня интересует только момент его поступления. Обработку рекордсета я делаю, перемежая его DoEvents-ом ясно, у тебя всё ок. тогда это тем, кто думает , что открыв коннект со свойством Async, у него всё сразу стало ассинхронным =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:33 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Я не очень понял, к чему ты это. Костя пытается тебе сказать, что в случае асинхронного рекордсета, асинхронными есть только действия связанные с этим рекордсетом, и при этом остается возможность производить синхронные запросы. А в случае асинхронного коннекта, вся работа становится асинхронной. З.Ы. Если я правильно понял Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:35 |
|
||
|
Использование курсоров в ADO (aduka05adm)
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shocker.Pro > Я не очень понял, к чему ты это. Костя пытается тебе сказать, что в случае асинхронного рекордсета, асинхронными есть только действия связанные с этим рекордсетом, и при этом остается возможность производить синхронные запросы. А в случае асинхронного коннекта, вся работа становится асинхронной. З.Ы. Если я правильно понял что-то в этом роде, но ещё и то, что сами рекордсеты при ассинхронном соединении ещё надо так же вызывать ассинхронно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 11:36 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36707683&tid=2159621]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 371ms |

| 0 / 0 |
