powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужен совет по работе в асинхронном режиме
9 сообщений из 9, страница 1 из 1
Нужен совет по работе в асинхронном режиме
    #34227155
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: VFP 5, MSSQL2000 + Sybase SQL Servers
Итак, ситуация: по клику пользователя загружается окно с данными для работы (read-write), и затем доп. окно с "справочными" данными только для чтения. Сейчас все последовательно в синхронном режиме.

Проблема : регулярные тормоза при открытии дополнительного окна. Причина: 3 последовательные процедуры поиска информации по большой рабочей базе (locks, timeouts, etc)

Я планирую сделать загрузку данных доп. окна в асинхронном режиме, чтобы это не тормозило основную работу пользователя. Вопрос: как это лучше организовать? (с асинхронным режимом знаком только в теории, реально не работал)
Есть мысли сделать проверку на наличие данных а) по отдельной кнопке или б) по таймеру
(но опять же, поскольку по-очереди должны выполниться 3 процедуры, как это организвать?)

Спасибо за любые практические советы.
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34227193
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хлопотно это очень да и выигрыш в скорости вы не получити. Скорее наоборот.
Может сам запрос отладить, например для выбора из справочника использовать Hint NOLOCK.

С уважением, Алексей
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34227348
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этого хинта нет, хотя пробовал работать в режиме
set transaction isolation level 0 - но не помогло

и что, в случае этого хинта сервер даст мне уже залоченные кем-то данные?
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34227351
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если твое доп окно не всегда обязательно для работы, то можно заполнять асинхронно (только общее время выполнения запроса увеличивается) А можешь вообще убрать это окно и сделать отдельную кнопку для его вывода. Кому надо - нажмет и подождет

Асинхронно лучше по таймеру. В событие 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.
local llFirst
if empty(thisform.nSQL)
	SQLSetProp( 0 , 'DispWarning', .F.)
	SQLSetProp( 0 , 'DispLogin',  3 )
	thisform.nSQL = SQLStringConnect("Driver={SQL Server};SERVER=...;DATABASE=...;UID=...;Pwd=...")
	if thisform.nSQL <  0 
		MessageBox('Не удалось соединиться с SQL-сервером')
		thisform.nSQL =  0 
	else
		SQLSetProp(thisform.nSQL, "Asynchronous", .t.)
		llFirst = .t.
	endif
endif

if thisform.nSQL >  0 
	if llFirst
		lnRet = SQLExec(thisform.nSQL, ThisForm.edtQuery.value, "res")
	else
		lnRet = SQLExec(thisform.nSQL, '')
	endif
	do case
		case lnRet <  0 
			aerror(laErr)
			MessageBox('Ошибка № ' + str(laErr[ 1 , 1 ]) + ' ' + laErr[ 1 , 2 ])
			SQLDisconnect(thisform.nSQL)
			thisform.nSQL =  0 
		case lnRet >  0 
			* Здесь обрабатываем полученное
			SQLDisconnect(thisform.nSQL)
			thisform.nSQL =  0 
	endcase
endif

if thisform.nSQL =  0 
	this.Interval =  0 
endif
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34227920
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Tsэтого хинта нет, хотя пробовал работать в режиме
set transaction isolation level 0 - но не помогло

и что, в случае этого хинта сервер даст мне уже залоченные кем-то данные?
С утра был :)
1. В начале ХП установи:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
2. В команде SELECT после имени таблицы укажи WITH (NOLOCK)
Сервер тебе будет возвращать "грязные" данные - данные из незавершенных транзакций. Т.е. те, которые были до того, как их заблокировал другой процесс перед изменением.
Удаленные данные даже из не завершенных транзакций ты не увидишь - MS SQL 2000 не версионный сервер, а блокировочный.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34228618
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, попробую
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34230629
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize.
У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают.
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34230828
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin PahanВообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize.
У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают.
Это в случае если выборка получается большая, а получает ее сервер быстро (select * from MyTable). Экономия времени на передаче от сервера к клиенту. В данном случае тормоз в выборке, а не в передаче результата.
...
Рейтинг: 0 / 0
Нужен совет по работе в асинхронном режиме
    #34232028
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки придется делать асинхронную процу.
Новый коннект, в таймере по-очереди запуск трех запросов, с возможностью прервать выполнение одного из них если пользователь уже не дождался и передумал смотреть эти доп.данные.

Есть еще предложения по реализации?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужен совет по работе в асинхронном режиме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]