Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Компиляция MEMO поля  [new]
Аетон Павлович
Guest
Есть таблица с колонкой типа MEMO, в которой содержится код программы. Данный код используется при обработке другой таблицы. Для выполнения использую ExecScript, все нормально работает, но медленно, если строк в обрабатываемой таблице несколько тысяч. Преполагаю - это из-за того, что Fox постоянно перекомпилирует код обработки, может можно сделать Cache, чтобы ускорить этот процесс?
3 фев 09, 10:26    [6770680]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
создайте в этой таблице еще одно мемо поле

вытащите из мемео текс, суньте во врем-й прг,
компильните,
считайте fxp и суньте в поле Compiled

при выполнении считайте из Compiled, создайте в темп.каталоге файл
и выполняйте,
пересоздавать каждый раз необходимо после внесения изм-й,
новой копмиляции, заморочившись на какой-то флаг актуальности.
3 фев 09, 10:37    [6770773]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
+ приведите текст скрипта

+ краткий алгоритм использования

попробуем оптимизировать
3 фев 09, 10:43    [6770803]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
вот пример оптимизации, нужно было уйти от evaluate
здесь имеется алгоритм, который сканит курсор
(количество записей может быть ....)
и постоянно вычисляет одну и ту-же,
построенную по безумному алгоритму строку,
чтобы не использовать макроподстановку,
создаем врем-й файлик, компилим и постоянно зовем обычную готовую
фоксовую компилированную функцию
(бред было лень переписывать, поэтому именование переменных хромает)

external procedure tmpScIns
local lcTmpProgFileName, llCreateTmpProc
lcTmpProgFileName = iif(reccount()>2, addbs(sys(2023))+"tmpScIns.prg", "")

SCAN &s_c_cWhere
	if !llCreateTmpProc and !empty(lcTmpProgFileName)
		local lcOldNotify
		lcOldNotify =  lower(set("Notify"))
		set notify off
		try
			= strtofile("return " + s_c_cShablon, lcTmpProgFileName)
			compile (lcTmpProgFileName)
			set procedure to (lcTmpProgFileName) additive 
			llCreateTmpProc = .t.
		catch
			lcTmpProgFileName = ""
		endtry
		if lcOldNotify="on"
			set notify on
		endif
	endif
	s_c_nCounter = s_c_nCounter + 1
	scatter memvar memo
	s_c_cIns = s_c_cIns + iif(llCreateTmpProc, tmpScIns(), evaluate(s_c_cShablon)) + s_c_InsSep

3 фев 09, 10:51    [6770866]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
Антон Павлович
Guest
Вот сам пытаюсь это реализовать, только что делать, если у меня возврат из функции есть?
3 фев 09, 10:59    [6770966]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
lcTmpProgFileName = addbs(sys(2023))+"ttttt.prg"
set procedure to (lcTmpProgFileName) additive

далее 2-мя способами - я не вижу Вашей реализации

local lnParam
if ttttt(@lnParam)
   .....
endif

local lnResult
lnResult=ttttt()

if llCreateTmpProc
release procedure (lcTmpProgFileName)
erase (lcTmpProgFileName) && если нужно прибить файл
endif
3 фев 09, 11:06    [6771034]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
при наличии доп.поля - храните компил.код рядом
и в темп.каталог вытаскивайте именно компил.код, тогда потребность
в компил.отпадает,
перекомп. нужно будет делать только в случае неактуальности
(если в основной скрипт внесли изменения)

покажите пожалуйста примерный скрипт
3 фев 09, 11:09    [6771057]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
Антон Павлович
Guest
Вот собственно и пишу реализацию.
3 фев 09, 11:21    [6771160]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
Антон Павлович
Guest
Спасибо. Удалось ускорить процесс в 5 раз .))))
3 фев 09, 14:24    [6772816]     Ответить | Цитировать Сообщить модератору
 Re: Компиляция MEMO поля  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
пожалуйста
3 фев 09, 17:54    [6774292]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить