Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

8.3. Оптимизация программ

8.3.1. Некоторые приемы программирования

Для повышения скорости выполнения программ:

  • выбирайте, если это возможно, тип данных Integer: операции с таким типом данных выполняются быстрее, чем с другими типами данных;

  • используйте целый тип данных для создания индексов: индексные файлы будут наиболее компактны и более производительны; уменьшение индексного файла обеспечивает применение функции BINTOC( ), преобразовывающей целую величину в двоичную в символьном представлении;

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

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

  • применяйте SCATTER TO ARRAY вместо SCATTER MEMVAR как более быструю команду;

  • чтобы эффективнее использовать память, не создавайте объекты до тех пор, пока в этом нет необходимости, и очищайте объект из памяти после того, как потребность в нем пропала. Для определения размера памяти, занимаемой созданными объектами, применяется функция SYS(1016);

  • посылайте данные в окно, находящееся на переднем плане. Обновление окон заднего плана происходит заметно медленнее. Наиболее медленное событие – это прокрутка окна заднего плана, вызываемая выводимыми данными;

  • устанавливайте SET TALK в OFF для предотвращения вывода сопутствующей исполнению программы информации;

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

cFile = "Cust"

use &cFile && Медленная макроподстановка

use (cFile) && Выражение с именем; работает быстрее

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

8.3.2. Оптимизация повторных обращений к свойствам объектов

При обращении к свойству объекта "через точку" (Object.Property) VFP должен прежде найти объект, а потом осуществить доступ к его свойству. При многократных обращениях такой механизм ведет к снижению быстродействия. Поэтому число таких обращений должно быть минимизировано.

Пример. Непосредственное копирование значения свойства ThisForm.cCharString в массив ThisForm.aCharArray

for nCounter = 1 to 256

ThisForm.aCharArray[nCounter] = Substr(ThisForm.cCharString, nCounter, 1)

endfor

лучше заменить на следующий более быстрый код:

lcChar = ThisForm.cCharString

local laCharArray[256]

for nCounter = 1 to 256

laCharArray[nCounter] = Substr(laChar, nCounter, 1)

endfor

&& Копируем локальный массив laCharArray в свойство-массив ThisForm.aCharArray

Acopy(laCharArray, ThisForm.aCharArray)

8.3.3. Обращение к нескольким свойствам объекта

При обновлении нескольких свойств объекта VFP ищет его несколько раз. Так в следующем коде

ThisForm.pgfCstInfo.pgCstName.txtName.Value = "Fred Smith"

ThisForm.pgfCstInfo.pgCstName.txtName.BackColor = RGB(255, 0, 0)

дважды выполняется поиск 4-х объектов: ThisForm, pgfCstInfo, pgCstName и txtName.

Двукратного поиска можно избежать, если употребить команду WITH ... ENDWITH:

with ThisForm.pgfCstInfo.pgCstName.txtName

.Value = "Fred Smith"

.BackColor = RGB(255, 0, 0)

endWith

В таком варианте объекты ищутся 1 раз.

Также однократный поиск объектов обеспечит следующий код:

oControl = ThisForm.pgfCstInfo.pgCstName.txtName

oControl.Value = "Fred Smith"

oControl.BackColor = RGB(255, 0, 0)

Иные темы, связанные с оптимизацией функционирования, см. в разд. Optimizing Applications файла справки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]