|
|
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Дано: VFP 5, MSSQL2000 + Sybase SQL Servers Итак, ситуация: по клику пользователя загружается окно с данными для работы (read-write), и затем доп. окно с "справочными" данными только для чтения. Сейчас все последовательно в синхронном режиме. Проблема : регулярные тормоза при открытии дополнительного окна. Причина: 3 последовательные процедуры поиска информации по большой рабочей базе (locks, timeouts, etc) Я планирую сделать загрузку данных доп. окна в асинхронном режиме, чтобы это не тормозило основную работу пользователя. Вопрос: как это лучше организовать? (с асинхронным режимом знаком только в теории, реально не работал) Есть мысли сделать проверку на наличие данных а) по отдельной кнопке или б) по таймеру (но опять же, поскольку по-очереди должны выполниться 3 процедуры, как это организвать?) Спасибо за любые практические советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:11 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Хлопотно это очень да и выигрыш в скорости вы не получити. Скорее наоборот. Может сам запрос отладить, например для выбора из справочника использовать Hint NOLOCK. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:19 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
этого хинта нет, хотя пробовал работать в режиме set transaction isolation level 0 - но не помогло и что, в случае этого хинта сервер даст мне уже залоченные кем-то данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:51 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Если твое доп окно не всегда обязательно для работы, то можно заполнять асинхронно (только общее время выполнения запроса увеличивается) А можешь вообще убрать это окно и сделать отдельную кнопку для его вывода. Кому надо - нажмет и подождет Асинхронно лучше по таймеру. В событие Timer() прописываешь что-то типа Код: 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. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:51 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Andrey Tsэтого хинта нет, хотя пробовал работать в режиме set transaction isolation level 0 - но не помогло и что, в случае этого хинта сервер даст мне уже залоченные кем-то данные? С утра был :) 1. В начале ХП установи: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 2. В команде SELECT после имени таблицы укажи WITH (NOLOCK) Сервер тебе будет возвращать "грязные" данные - данные из незавершенных транзакций. Т.е. те, которые были до того, как их заблокировал другой процесс перед изменением. Удаленные данные даже из не завершенных транзакций ты не увидишь - MS SQL 2000 не версионный сервер, а блокировочный. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:07 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
спасибо, попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 17:08 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Вообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize. У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 14:37 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
Kruchinin PahanВообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize. У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают. Это в случае если выборка получается большая, а получает ее сервер быстро (select * from MyTable). Экономия времени на передаче от сервера к клиенту. В данном случае тормоз в выборке, а не в передаче результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 15:33 |
|
||
|
Нужен совет по работе в асинхронном режиме
|
|||
|---|---|---|---|
|
#18+
И все-таки придется делать асинхронную процу. Новый коннект, в таймере по-очереди запуск трех запросов, с возможностью прервать выполнение одного из них если пользователь уже не дождался и передумал смотреть эти доп.данные. Есть еще предложения по реализации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 09:59 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34227351&tid=1590084]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 425ms |

| 0 / 0 |
