Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма страшно тормазит во время цикла. / 6 сообщений из 6, страница 1 из 1
02.06.2004, 15:01
    #32544887
azz
azz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
Форма запускакт страшный цикл по апдейту Базы данных на пару часов и перестает реагировать. Комп практически виснетю Что делать?
...
Рейтинг: 0 / 0
02.06.2004, 15:08
    #32544903
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
Приведи код этого старшного цикла.
...
Рейтинг: 0 / 0
02.06.2004, 15:29
    #32544962
azz
azz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
Код: 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.
thisform.txtKgsDa.changevalue("Start...")


if thisform.chkKGS_DA.Value =  1 

txtSQL ="delete from TKGS_DA"
SQL(txtSQL)

do while substr(theString, 1 , 2 ) = "KG"
txtVersion = substr(theString, 1 , 9 )
dKG_DATUM=substr(theString, 16 , 2 )+"."+substr(theString, 14 , 2 )+"."+substr(thestring, 10 , 4 )
nKG_SCHLUESSEL = substr(theString, 18 , 8 )
txtKG_SATZART = substr(theString,  26 , 1 )
txtKG_NAME = substr(theString,  27 , 40 )

txtSQL = "INSERT INTO TKGS_DA(VERSION, KG_DATUM,KG_SCHLUSSEL,KGSATZART,KG_NAME) VALUES('" + tochar(txtVersion)+"','"+dKG_DATUM+"','"+ tochar(nKG_SCHLUESSEL)+"','"+tochar(txtKG_SATZART)+"','"+txtKG_NAME+"')"

SQL(txtSQL)


theString = fgets(DBFile)
theString = theString + fgets(DBFile)
enddo
thisform.txtKgsDa.changevalue("Fertig...")

*Skip
else
thisform.txtKgsDa.changevalue("Uberspringe...")
	do while substr(theString, 1 , 2 ) = "KG"
		theString = fgets(DBFile)
		theString = theString+fgets(DBFile)		
	enddo
thisform.txtKgsDa.changevalue("Ubersprungen...")
endif
I takih tam 12 schtuk. scego 450 Mb v Bazu skidivau
...
Рейтинг: 0 / 0
02.06.2004, 16:03
    #32545043
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
1. В длительных циклах обычно вставляют самописный индикатор прогресса, ну, или запускают какой-то AVI-файл с тем, чтобы пользователь не дергался и видел, что идет процесс и программа не зависла. В простейшем случае, можно просто в начале цикла писать

lnI=m.lnI+1
WAIT WINDOW NOWAIT STR(m.lnI)

2. Если речь идет о командах, посылаемых на сервер, то в циклических командах хорошо зарекомендовали себя команды предварительной компиляции запроса. Посмотрите описание команды SQLPrepare(). Т.е. вместо явного указания значения в команде INSERT указывается набор параметров (через вопросительный знак). Общий код выглядит примерно так:

txtSQL = "INSERT INTO TKGS_DA(VERSION, KG_DATUM,KG_SCHLUSSEL,KGSATZART,KG_NAME) VALUES(?txtVersion, ?dKG_DATUM, ?nKG_SCHLUESSEL, ?txtKG_SATZART, ?txtKG_NAME)"

* Предварительная компиляция запроса на сервере
=SQLPrepare(m.lnCH,m.txtSQL)
* Собственно цикл
DO WHILE ...
txtVersion = ...
dKG_DATUM = ...
nKG_SCHLUESSEL = ...
txtKG_SATZART = ...
txtKG_NAME = ...

=SQLExec(m.lnCH)
ENDDO

3. У тебя очень большое время тратится на формирование значений (fgets). Построчное чтение из текстового файла - это ОЧЕНЬ медленная операция. Используй групповые команды APPEND FROM, чтобы качнуть сразу все из текстового файла во временную таблицу. Потом делай разборку содержимого этой временной таблицы, но тоже через групповые команды, вроде REPLACE FOR или DELETE FOR. А если еще использовать Remote View для записи, то закачка ускорится многократно.
...
Рейтинг: 0 / 0
02.06.2004, 16:24
    #32545102
azz
azz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
Ti mena obsalutno ne ponal....
Vrema raboti ne problema, vrema sostovlenija komandi v hudschem slucae 1/20 ot vremeni peredaci dannih na server.
Da i otobrajenie protsesa mena ne volnuet.
Forma uje napisana, ogromnoe kolicestvo teksta. Perepisivat ejo ctobi sokratit 4 casovuju rabotu programmi na 20 minut ja ne soberaus.
Mne prosto nujno ctob komp ne podvesal, i ctob vo vrema raboti ja mog najat na etoj forme knopku... I vse. Podskaji pojalujsta esli znaesch kak!
...
Рейтинг: 0 / 0
02.06.2004, 17:20
    #32545225
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма страшно тормазит во время цикла.
DOEVENTS - тебе поможет

Просто все методы в FoxPro выполняются "линейно". Невозможно запустить другой процесс, пока не завершится процедура с циклом. Команда DOEVENTS как раз и призвана проверить - нет ли еще какого процесс в очереди и запустить его.

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


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