Оптимизация
Есть основной цикл формирующий композитный отчет. Из этого основного цикла запускаются процедуры. В процедурах выполняются хранимые процедуры, доступ к данным через ADO компоненты, затем следует вызов PreparedReport(False), который очень медленно отрабатывает при чем закономерность такая, чем больше страниц загружено тем медленнее выполняется PreparedReport(False). Как с этим можно бороться? Заранее благодарен всем откликнувшимся.
Комментарии
Проблемка в 3-йке (думаю для 4-ки тоже подойдет) обходится мною следующим образом:
На форму кладется 2 компонента frxReport
далее в цикле
for i:=1 to 100 do begin
frxRep1.prepareReport(true);
frxRep2.PreviewPages.addFrom(frxRep1)ж
end;
FrxRep2.ShowPrepareReport
Скорость подготовки отчета практически не падает, но все равно
работает по сравнению с двойкой чудовищно-медленно.
Попробовал сейчас слегка переделать демку, чтобы по кнопке Design делался PrepareReport(false). Нагенерил в общей сложности 30000 страниц. Скорость формирования отчета если и упала, то незначительно. Возможно, при 100000 страницах тормоза и будут, но терпения не хватило...
Вот кусок кода как это выглядет. Соответственно метод PreparedReport(False) вызывается в Proc2, Proc3 и т.д.
Ну, а если быть совсем точным, то Access violation... возникает в модуле frxPreviewPages.pas в процедуре TfrxPreviewPages.AddFrom(Report: TfrxReport). Может быть разработчики допустили ошибку. Если нет, то скажите, что я нет так делаю.
procedure TfrxEngine.PrepareShiftTree(Band: TfrxBand);
begin
// add
if Band.FShiftChildren.Count <> 0 then
Exit;
//
...
из-за этого тоже падение производительности.
to AlexTZ :спасибо за совет, обязательно попробую