2013-06-14 1 views

ответ

3

Вы всегда можете проверить это самостоятельно и посмотреть ... но, да, это немного более эффективным. Или это был последний раз, когда я его тестировал. Причина в том, что компилятор объединяет операторы, а полученный r-код немного меньше.

Но эффективность почти всегда является плохой причиной для этого. Сохранение микросекунды здесь и там бледнеет рядом с тем, чтобы избегать дискового ввода-вывода или выбора более эффективного алгоритма. Хорошие причины:

0) В темные века существовал предел в 63k r-кода для каждой программы. Это был способ уменьшить размер r-кода и оставаться под этим ограничением (хорошо, это может быть не «хорошая» причина). Еще один способ помочь вам в том, что вы также можете часто избегать пары DO ... END и дополнительно уменьшать размер r-кода.

1) При создании записи поля, которые являются частью индекса, будут возвращены в базу данных по мере их назначения (а не в конце транзакции). Объединение всех назначений в один оператор помогает избежать несовместимые грязные чтения. (Это, вероятно, лучшая причина для этого.)

2) Читаемость - вы можете утверждать, что группировка последовательных заданий более четко показывает ваше намерение и, следовательно, более читаема. (Мне нравится эта причина, но не все согласны.)

0

ASSIGN объединит несколько операторов в одном. Если, v и ш являются поля в вашем дб, это означает, что он будет делать что-то вроде INSERT INTO (а, V, W) ...

, а не INSERT INTO (а) ... INSERT INTO (v)

т.д.

+0

Это имеет смысл для назначений базы данных, но как насчет загрузки переменных в программу? В этом случае он более эффективен? – Bill

+0

Да, он более эффективен. Это связано с тем, как Progress обрабатывает доступ к памяти. – ilovebigmacs

0

в основном делает:

а = 3.

v = 7.

w = 8.

такая же, как:

назначить = 3.

присвоить v = 7.

Назначить w = 8.

, который представляет собой 3 отдельных заявления, поэтому немного больше накладных расходов. Поэтому менее эффективны.

+0

Почему это больше накладных расходов? Разве компилятор не должен вычислять все 3 заявления отдельно (даже если используется только один «назначить»)? – Bill

+0

Прогресс присваивает в качестве одного из операторов назначение одной или нескольких переменных. Если вы не скажете «Назначить», то предполагается, что вы будете делать 3 заявления вместо 1. Сокращение R-кода на 20-40% и улучшение производительности на 15% - 20% при использовании одного оператора присваивания. Почему это можно только предполагать, поскольку я не могу найти источник информации о том, почему это так. Для полей базы данных и особенно полей ключа/индекса это имеет смысл. Для переменных я могу только предположить, что он связан с тем, как прогресс управляет его буферами и копирует данные в буферы и из них. – AquaAlex