Проблема с производительностью
Проблема с производительностью
Есть отчет сделанный на вебе (версия StimulReportNet20(2008_1).zip 2008.1.200.0.) В отчете 8 колонок, 200 страниц данных. Переход с одной страницы на следующую происходит 5 минуты. Выбрана опция UseCache. Компьютер CoreDue 2.13 Gz, 2 Gb памяти. При меньшем объеме данных скорость увеличивается. Таким образом пользоваться таким отчетом сейчас не возможно, единственный вариант это экспорт в Ексель.
Проблема с производительностью
Здравствуйте,
Можно использовать режим RenderOnlyCurrentPage свойства RenderMode. Этот режим специально сделан для таких случаев. Отчет строится только до страницы, которая отображается в данный момент.
Спасибо.
Можно использовать режим RenderOnlyCurrentPage свойства RenderMode. Этот режим специально сделан для таких случаев. Отчет строится только до страницы, которая отображается в данный момент.
Спасибо.
Проблема с производительностью
В режиме RenderOnlyCurrentPage я должен перенести селект из отчета в код программы, сохранить в сессии набор данных и связывать данные с отчетом при каждом переходе на следующую страницу. Я правильно понял? К сожалению в документации не нашел примера.Vital писал(а):Здравствуйте,
Можно использовать режим RenderOnlyCurrentPage свойства RenderMode. Этот режим специально сделан для таких случаев. Отчет строится только до страницы, которая отображается в данный момент.
Спасибо.
Проблема с производительностью
Нет, генератор отчетов должен делать это сам. Отчет должен строиться в событии PageLoad.
Спасибо.
Спасибо.
Проблема с производительностью
Т.е. при переходе на слудующую страницу будут заново вытягиваться данные из базы? Или я не прав?Vital писал(а):Нет, генератор отчетов должен делать это сам. Отчет должен строиться в событии PageLoad.
Спасибо.
Сейчас при нажатии кнопки на странице у меня выполняется следующий код:
protected void BForm_Click(object sender, EventArgs e)
{
..................................................
Stimulsoft.Report.StiReport report = StiWebReport1.GetReport();
report.Load(Server.MapPath(null) + "\\Report\\Table1n.mrt");
report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(
new Stimulsoft.Report.Dictionary.StiOleDbDatabase("Соединение", ConnectionStringData));
report.Compile();
report["param"] = value;
report["title"] ="станом за "+ title;
StiWebViewer1.Report = report;
Подскажати, как мне изменить этот код в случае использования параметра RenderOnlyCurrentPage
Проблема с производительностью
Здравствуйте.
Да, данные будут забираться из базы каждый раз.
У Вас в коде присутствует вызов метода Compile(). Компиляция отчетов (без тяжелой графики в шаблоне отчета) занимает 1 секунду или две. Соответственно, чем больше шаблон, тем дольше время компиляции. Этот момент можно оптимизировать:
Сообщите также, пожалуйста, размер mrt файла и время построения Вашего отчета в Windows Forms (можно открыть отчет в Designer.exe)
5 мин все таки многовато для пострения отчета на 200 страниц.
Спасибо.
Да, данные будут забираться из базы каждый раз.
У Вас в коде присутствует вызов метода Compile(). Компиляция отчетов (без тяжелой графики в шаблоне отчета) занимает 1 секунду или две. Соответственно, чем больше шаблон, тем дольше время компиляции. Этот момент можно оптимизировать:
Код: Выделить всё
StiReport stiReport = null;
string compiledReportFile = Server.MapPath("report.dll");
if (!File.Exists(compiledReportFile))
{
stiReport = new StiReport();
stiReport.Load(Server.MapPath("myreport.mrt"));
stiReport.Dictionary.DataStore.Clear();
stiReport.Dictionary.Databases.Clear();
stiReport.RegData("MyDataSet", dataset);
stiReport.Dictionary.Synchronize();
stiReport.Compile(compiledReportFile);
}
else
{
stiReport = StiReport.GetReportFromAssembly(compiledReportFile, true);
stiReport.RegData("MyDataSet", dataset);
}
5 мин все таки многовато для пострения отчета на 200 страниц.
Спасибо.
Проблема с производительностью
>Да, данные будут забираться из базы каждый раз.Edward писал(а):Здравствуйте.
Да, данные будут забираться из базы каждый раз.
У Вас в коде присутствует вызов метода Compile(). Компиляция отчетов (без тяжелой графики в шаблоне отчета) занимает 1 секунду или две. Соответственно, чем больше шаблон, тем дольше время компиляции. Этот момент можно оптимизировать:Сообщите также, пожалуйста, размер mrt файла и время построения Вашего отчета в Windows Forms (можно открыть отчет в Designer.exe)Код: Выделить всё
StiReport stiReport = null; string compiledReportFile = Server.MapPath("report.dll"); if (!File.Exists(compiledReportFile)) { stiReport = new StiReport(); stiReport.Load(Server.MapPath("myreport.mrt")); stiReport.Dictionary.DataStore.Clear(); stiReport.Dictionary.Databases.Clear(); stiReport.RegData("MyDataSet", dataset); stiReport.Dictionary.Synchronize(); stiReport.Compile(compiledReportFile); } else { stiReport = StiReport.GetReportFromAssembly(compiledReportFile, true); stiReport.RegData("MyDataSet", dataset); }
5 мин все таки многовато для пострения отчета на 200 страниц.
Спасибо.
Т.е. как я и писал надо переносить селект в программу и сохранять данные в сессии.
Отчет не сложный. Размер ~50 кб. В дизайнере отчет формируется ~20с. Проблема только в html при переходе с одной станицы отчета на другую. В дизайнере это нельзя смоделировать, там даже во вкладке Просмотр html показываются все страницы. Такое впечатление, что при переходе на след. страницу в отчете, он полностью заново просчитывается.
Проблема с производительностью
Здравствуйте,
Если отчет строится 20 секунд в дизайнере, то в webviewer он должен отображаться ну от силы секунд 40 (построение отчета + эскпорт отчета в html). Ну предположим еще добавляется сохранение построенного отчета в кэш. Ну секунд 20 на 200 страниц. Не должно быть большой паузы. Можно попробывать сделать так на первом шаге:
str сохранить в кэше.
На втором и последующем шаге отчет отображать так:
Хотя собственно именно это и делается в режиме кэширования.
Спасибо.
Если отчет строится 20 секунд в дизайнере, то в webviewer он должен отображаться ну от силы секунд 40 (построение отчета + эскпорт отчета в html). Ну предположим еще добавляется сохранение построенного отчета в кэш. Ну секунд 20 на 200 страниц. Не должно быть большой паузы. Можно попробывать сделать так на первом шаге:
Код: Выделить всё
report.Render(false);
string str = report.SaveDocumentToString();
webViewer1.Report = report;
На втором и последующем шаге отчет отображать так:
Код: Выделить всё
StiReport report = new StiReport();
report.LoadDocumentFromString(str);
webViewer1.Report = report;
Спасибо.
Проблема с производительностью
В режиме UseCahe переход с 1 на последнюю 220 страницу занимает 7 минут (больше чем время первого построения отчета). В режиме Standart с экспортом и импортом строки ~2 минуты. Что тоже очень много.Vital писал(а):Здравствуйте,
Если отчет строится 20 секунд в дизайнере, то в webviewer он должен отображаться ну от силы секунд 40 (построение отчета + эскпорт отчета в html). Ну предположим еще добавляется сохранение построенного отчета в кэш. Ну секунд 20 на 200 страниц. Не должно быть большой паузы. Можно попробывать сделать так на первом шаге:
str сохранить в кэше.Код: Выделить всё
report.Render(false); string str = report.SaveDocumentToString(); webViewer1.Report = report;
На втором и последующем шаге отчет отображать так:
Хотя собственно именно это и делается в режиме кэширования.Код: Выделить всё
StiReport report = new StiReport(); report.LoadDocumentFromString(str); webViewer1.Report = report;
Спасибо.
Проблема с производительностью
Здравствуйте,
Пришлите пожалуйста mdc файл этого отчета. Сколько времени займет сохранение построенного отчета в mdc файл?
Спасибо.
Пришлите пожалуйста mdc файл этого отчета. Сколько времени займет сохранение построенного отчета в mdc файл?
Спасибо.