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

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

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

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

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

и что, в случае этого хинта сервер даст мне уже залоченные кем-то данные?
...
Рейтинг: 0 / 0
27.12.2006, 11:51
    #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
27.12.2006, 14:07
    #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
27.12.2006, 17:08
    #34228618
Andrey Ts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по работе в асинхронном режиме
спасибо, попробую
...
Рейтинг: 0 / 0
28.12.2006, 14:37
    #34230629
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по работе в асинхронном режиме
Вообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize.
У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают.
...
Рейтинг: 0 / 0
28.12.2006, 15:33
    #34230828
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по работе в асинхронном режиме
Kruchinin PahanВообще, если пользоваться CursorAdapter или RemoteView, там есть такие параметры FetchAsNeeded, FetchSize.
У меня так в паре мест реализованно. Пользователь открывает основную форму и пока он на нее глазами хлопает, потихоньку подтягиваются справочники. Если пользователь вдруг заинтересуется справочником и сделает GOTO на запись, которая еще не подтянулась, поток загрузки этого курсора активируется и здесь пользователю придется немножко подождать. Но обычно пользователи достаточно долго глазами хлопают.
Это в случае если выборка получается большая, а получает ее сервер быстро (select * from MyTable). Экономия времени на передаче от сервера к клиенту. В данном случае тормоз в выборке, а не в передаче результата.
...
Рейтинг: 0 / 0
29.12.2006, 09:59
    #34232028
Andrey Ts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по работе в асинхронном режиме
И все-таки придется делать асинхронную процу.
Новый коннект, в таймере по-очереди запуск трех запросов, с возможностью прервать выполнение одного из них если пользователь уже не дождался и передумал смотреть эти доп.данные.

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


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