D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / FlashBASIC / Вопросы производительности

Вопросы производительности

Рекомендации по повышению быстродействия для FlashBASIC

Замена динамических массивов статическими массивами эффективна в случае, когда запись считывается из файла для последующей расширенной обработки. Если количество атрибутов в записи известно, для чтения динамической строки с диска в массив заданной размерности можно использовать оператор "matread". Если размерность неизвестна или подвержена изменениям, можно прочитать запись в динамический массив, затем использовать "dcount" для выяснения количества атрибутов, изменить размерность массива-матрицы на требуемую и присвоить значение динамического массива массиву-матрице заданной размерности.

Пример:

equ am to char(254)
read xx from "big.item"
size = dcount(xx,am)
dim stat(size)
stat = xx

Еще одна возможность заметного повышения производительности состоит в использовании поименованных common-областей для размещения данных, которыми должны пользоваться разные приложения. Дополнительную информацию по этому вопросу см. в разделе "common". Для использования именованных common-областей с этой целью все приложения, имеющие отношения к этим common-областям, должны быть откомпилированы с применением интерпретатора или FlashBASIC.

Если в приложении большое количество данных выдается на экран, рекомендуется строить экраны в виде больших строк (strings) в начале программы. Тогда для обновления экрана достаточно выполнить вывод строковой переменной c помощью оператора "print".

[email protected](-1):@(1,1):"Name:":@(1,2):"Number:":(1,3):"Address:"
print x

Для достижения наилучшего времени выполнения и компиляции фирма "Pick Systems" рекомендует разбивать прикладные задачи на небольшие модули. Для небольших модулей FlashBASIC устраняет обычные издержки времени прогона, связанные с обработкой большого количества вызовов (call), и может создать более эффективный код. Кроме того, прикладная задача, разбитая на несколько небольших модулей, при компиляции требует значительно меньше времени, чем та же самая задача, когда она хранится в виде одной записи.

Функция "@(x,y)" Pick/BASIC ускоряется в 10-20 раз, если определения "term" компилируются с опцией "o". Если, например, используется терминал IBM 3151, при компиляции команды "term ibm3151 (co" будет создан код FlashBASIC для драйвера терминала. При этом создается скрытый модуль, предназначенный для использования с кодом FlashBASIC. Наилучшие результаты эта опция дает на высокоскоростных линиях и/или со скоростной дисплейной аппаратурой.

Следует избегать использования "пользовательских мод" (user exits). Стандартные процедуры Pick/BASIC, скомпилированные с помощью FlashBASIC, могут работать так же быстро и даже быстрее, чем те же процедуры, написанные на виртуальном ассемблере.

Рекомендуется также избегать операций ввода/вывода с диском. Если прикладная задача считывает данные постоянных (read-only) таблиц, лучше всего занести их в память в начале программы, а не читать порциями в процессе выполнения. При чтении записи лучше использовать операцию считывания в матрицу ("matread"), чем несколько "readv".

Исходный текст Pick/BASIC компилируется в объектный код, который интерпретируется при исполнении. В D3 исходный текст Pick/BASIC может быть откомпилирован традиционно или может быть оптимизирован (Flashed). При оптимизации исходный текст Pick/BASIC преобразуется в исходный текст C, а затем компилируется C-компилятором системы хоста, с получением в результате машинозависимого ассемблерного кода.

В D3/NT исходный текст Pick/BASIC также может быть откомпилирован традиционным путем или может быть оптимизирован (Flashed). В последнем случае, исходный текст Pick/BASIC компилируется в оптимизированный объектный код, который интерпретируется при исполнении. Этот оптимизированный объектный код выполняется значительно быстрее оригинального кода, но не так быстро как ассемблерный код C-компилятора.