Проблемы с рекурсией

отредактировано 01:56 Раздел: FastScript
Здравствуйте, господа!!!
Ситуация следующая. Есть многозвенная система, где вся прикладнуха написана на VBScript. Сейчас используется MS HostScript.
Система работает нестабильно и периодически вываливаются сообщения типа Нехватает памяти. Опыты показали, что при рекурсивном вызове процедуры всё сваливается на 573 вызове. Причём эта цифра может колебаться от 500 до чуть более 100. От чего зависить - пока не очень понимаю.

Провёл эксперимент. Внутри Word вызов проходит около 5000 раз. Хотя при других выриантах уже около 3000 раз вдавал.

Провёл аналогичный эксперимент с FastScript.
Стабильно сваливается всё приложение на 2500 каком то вызове. Для совместимости использовал тоже VB.

Была идея сменить енжайн MS на FastScript - но теперь даже не знаю что далать. От чего зависит глубина вызовов? Как можно ею управлять или контроллировать?

Авторы могут прокомментировать даннуую ситуацию?

Привожу текст скрипта, выполняемого в ДЕМО FastScript 1.8

dim f, b, m

function TestCall(i)
I=I+1
m.Lines.Text=i
if i<3000 then
i=TestCall(I)
end if
end function

sub ButtonClick(Sender)
TestCall(1)
end sub

f = new TForm(nil)
f.Caption = "Test it!"
f.BorderStyle = bsDialog
f.Position = poScreenCenter

b = new TButton(f)
b.Name = "Button1"
b.Parent = f
b.SetBounds(10, 10, 75, 25)
b.Caption = "Test"

m = new TMemo(f)
m.Name = "Memo1"
m.Parent = f
m.SetBounds(10, 50, 200, 200)

b.OnClick = AddressOf ButtonClick

f.ShowModal
delete f

Комментарии

  • отредактировано 01:56
    При рекурсии активно используется стек. Есть предложение увеличить область памяти, отводимой под стек, в настройках компилятора.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.