Тщательно записывая код, вы можете написать самые быстрые программы. Есть несколько способов для улучшения исполнения программ в Visual FoxPro:

Общие советы по программированию

Для того, чтобы писать самые быстрые программы, последуйте рекомендациям, приведенным ниже.

  • Выбирайте правильный тип для ваших данных. В частности, используйте тип данных Integer для числовой информации там, где это только возможно, потому что он обрабатывается наиболее эффективно. По возможности, используйте тип данных Integer для первичных и внешних ключевых значений, в результате чего получаются небольшие файлы данных, небольшие индексы и более быстрые соединения.

    Замечание:
    Чтобы посмотреть пример создания небольшого и, следовательно, быстрого индекса, запустите приложение Solution.app, расположенное в папке Visual FoxPro ...\Samples\Solution. Выберите View Samples by Filtered List, выберите из выпадающего списка Indexes и затем выберите Create Small Indexes Using BINTOC( ) из появившегося списка.

  • Избегайте повторного открытия файлов, так как это замедляет выполнение приложения. Вместо этого, назначайте файлам при открытии рабочие области и, когда будет нужно, выбирайте эти области с помощью команды SELECT.

  • Применяйте циклы FOR ... ENDFOR вместо циклов DO WHILE ... ENDDO когда это только возможно, потому что они работают быстрее.

  • При копировании данных из множества полей команда SCATTER TO ARRAY работает быстрее чем команда SCATTER MEMVAR.

  • Для эффективного использования памяти избегайте создания объектов до того времени, пока они вам не понадобятся, и удаляйте объекты из памяти после окончания работы с ними.

    Совет:
    Вы можете проверить сколько памяти занимает каждый объект, вызвав функцию SYS(1016).

  • Направляйте вывод в окно, находящееся на переднем плане, потому что обновление окна, находящегося на заднем плане, происходит в значительной степени медленнее. Процесс вывода в прокручиваемое окно, находящееся на заднем плане, является самым наихудшим.

  • Отключите отображение результатов выполнения командой SET TALK OFF, которая устранит накладные расходы на обновление экрана.

  • Установите параметр команды SET DOHISTORY в значение OFF для того, чтобы командное окно не обновлялось при выполнении программы.

Используйте именованные выражения вместо макроподстановки

Производительность программы сильно улучшится, если использовать именованные выражения вместо макроподстановок. Например, если вы присвоите значение переменной cFile, то именованное выражение, созданное с cFile, будет выполнено быстрее макроподстановки.

  Копировать код
cFile = "CUST"
use &cFile && Макроподстановка медленнее
use (cFile) && Именованное выражение быстрее и, следовательно, предпочтительнее

Эффективно обращайтесь к свойствам объектов

Вы можете выполнение приложения более эффективным, если будете понимать как Visual FoxPro работает со свойствами и объектами.

Оптимизация многократных ссылок на свойство

Когда вы ссылаетесь на свойство объекта с помощью синтаксиса object.property, Visual FoxPro должен найти объект прежде чем получит доступ к свойству. Если вы должны многократно получать доступ к свойству, то этот поисковая стратегия сильно снизит производительность.

Для того, чтобы избежать многократно повторяющихся ссылок (например, в цикле), считайте значение свойства в переменную, сделайте изменения, а затем присвойте результат другому свойству. Например, следующий код заполняет свойство-массив; сначала создает массив в памяти, заполняет его, и затем за один раз присваивает результат свойству-массиву:

  Копировать код
* Копирование строки в локальную переменную
lcChar = THISFORM.cCharString
LOCAL laCharArray[256] && Создание локального массива
FOR nCounter = 1 to 256
laCharArray[nCounter] = SUBSTR(lcChar,nCounter,1)
ENDFOR
* Копирование локального массива в свойство-массив
ACOPY(laCharArray,THISFORM.aCharArray)

Эффективное обращение к множеству свойств

Если вы обновляете более чем одно свойство объекта, то Visual FoxPro должен искать объект много раз, что обязательно скажется на производительности. Например, следующий код заставляет Visual FoxProпросматривать четыре объекта (а именно,  THISFORM, pgfCstInfo, pgCstName, and txtName) для того, чтобы найти свойство, которое должно быть установлено. Но, поскольку, этот код устанавливает значение двух свойств, то четырехкратный поиск будет сделан дважды:

  Копировать код
THISFORM.pgfCstInfo.pgCstName.txtName.Value = ;
"Fred Smith"
THISFORM.pgfCstInfo.pgCstName.txtName.BackColor = ;
RGB (0,0,0)

Для того, чтобы избежать этих накладных расходов, применяйте команду  WITH ... ENDWITH. Этот метод заставляет Visual FoxPro находить объект только один раз. Например, следующий пример выполняет ту же задачу, что и предшествующий, но быстрее:

  Копировать код
WITH THISFORM.pgfCstInfo.pgCstName.txtName
.Value = "Fred Smith"
.BackColor = RGB (0,0,0)
ENDWITH

Вы также можете сохранить объектную ссылку в переменной, а затем включать переменную вместо объектной ссылки:

  Копировать код
oControl = THISFORM.pgfCstInfo.pgCstName.txtName
oControl.Value = "Fred Smith"
oControl.BackColor = RGB (0,0,0)

См. также