Бюджеты скриптов формы

Каждое вычисление form-скрипта идёт под строгими бюджетами, покрывающими процессорное время, память, глубину рекурсии, число инструкций и операций, а также вывод, который скрипт может породить, — поэтому убежавший расчёт не способен затормозить проход пересчёта или исчерпать память

THPDFScriptBudgets

THotPDF.FormScriptBudgets хранит набор бюджетов, который применяют EvaluateLoadedFieldJavaScript и каждый проход пересчёта. Запись THPDFScriptBudgets раскрывает MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (отсечка по CPU в настенном времени), MaxValueBytes (потолок одного значения), MaxTotalValueBytes (суммарная память) и MaxOutputBytes (потолок генерируемого вывода); ноль в любом поле снимает соответствующий лимит

var
  Budgets: THPDFScriptBudgets;
begin
  Budgets:= PDF.FormScriptBudgets;
  Budgets.MaxElapsedMilliseconds:= 100;
  Budgets.MaxTotalValueBytes:= 1024* 1024;
  PDF.FormScriptBudgets:= Budgets;
end;

Принуждение и телеметрия

Отсечка по CPU проверяется по мере накопления операций и байтов значений, поэтому скрипт не может обойти её одной аллокацией; суммарный бюджет памяти ловит скрипты, которые выделяют и выбрасывают много мелких значений. Нарушение проваливает вычисление с содержательным ErrorText, а запись результата помимо числа операций сообщает телеметрию ElapsedMilliseconds и ValueBytes

Бюджеты по умолчанию сохраняют исторические лимиты (скрипты до 8192 байт, 32 инструкции, глубина 32, 1024 операции, 256 KB на значение) и добавляют отсечку CPU в 500 ms, суммарный бюджет памяти 4 MB и потолок вывода 64 KB