Большинство скриптовых языков (JScript, VBScript, PHP) обеспечивают автоматическое освобождение памяти, выделеное в при cоздании объектов и т.п.). Хотелось бы пожелать подобного FastScript.
В демку FS ...\FastReports\FastScript\Demos\Main\Unit1.pas добавим замеры памяти до и после компиляции и выполнения, будем писать их в логи и в статус и делать выводы. Примерно так:
//добавим эту процедуру в форму демки
procedure TForm1.AddToMemLog(MemCompile1, MemCompile2, MemExecute1,
MemExecute2: Integer);
const
LogName = 'd:\fs_memlog.txt';
var
F: TextFile;
S: string;
begin
S := Format('%d %d %d %d %d %d',
[MemCompile1, MemCompile2, MemCompile2-MemCompile1,
MemExecute1, MemExecute2, MemExecute2-MemExecute1]);
AssignFile(F, LogName);
try
if FileExists(LogName)
then Append(F)
else begin
Rewrite(F);
Writeln(F, 'Дата-Время Пам.до комп Пам.после комп. Разница Пам.до вып. Пам.после вып. Разница');
end;
Writeln(F, Format('%s %s',
[FormatDateTime('dd.mm.yy hh:nn:ss', Now), S]));
Flush(F);
finally
CloseFile(F);
end;
Status.Lines.Add(S);
end;
// в методе RunBtnClick добавим соответственно:
var
...
MemCompile1, MemCompile2, MemExecute1, MemExecute2: Integer;
...
MemCompile1 := AllocMemSize;
// вызов fsScript1.Compile
MemCompile2 := AllocMemSize;
...
MemExecute1 := AllocMemSize;
// вызов fsScript1.Execute;
MemExecute2 := AllocMemSize;
...
// в конце процедуры пишем в лог и статус
Status.Text := 'Executed in ' + IntToStr(GetTickCount - t) + ' ms';
AddToMemLog(MemCompile1, MemCompile2, MemExecute1, MemExecute2);
end;
По-хорошему, размер памяти до и после выполнения скрипта должен быть одинаков. Естественно, никакой сборки мусора нет - если мы будем выполнять примерно такой скрипт:
var
Form: TForm;
begin
Form := TForm.Create(nil);
end;
то обнаружим, что память захватывается. Возникает вопрос, а нужно ли взрослому человеку напоминать, что, например, после сортира надо помыть руки? Увы... Не напоминать, а чистить все подряд за нашим юзером надо Особенно когда он начинает проги писать Вообще ведение логов со всей необходимой инфой очень полезная штука, а на удаленных машинах просто бесценная. Кто не пробовал, настоятельно рекомендую
Комментарии
Вообще ведение логов со всей необходимой инфой очень полезная штука, а на удаленных машинах просто бесценная. Кто не пробовал, настоятельно рекомендую