Общие рекомендации по повышению быстродействия формирования отчетов
Общие рекомендации по повышению быстродействия формирования отчетов
Сабж. Есть ли таковые? Пользователей не очень устраивает скорость формирования при пакетной печати документов. Интересует сокращение времени рендеринга и печати как такового, компиляция однотипных отчетов делается и так один раз.
Общие рекомендации по повышению быстродействия формирования отчетов
Здравствуйте,
Покажите пожалуйста код, который используется для построения и печати отчетов. Так же интересует, что именно является узким местом - формирование отчета или его печать?
Спасибо.
Покажите пожалуйста код, который используется для построения и печати отчетов. Так же интересует, что именно является узким местом - формирование отчета или его печать?
Спасибо.
Общие рекомендации по повышению быстродействия формирования отчетов
Код такой:
Печать 20 документов (акты на 1-2 страницы) занимает на целероне 2.6ГГц с 1ГБ памяти 36 секунд, на Core 2 Duo 2.8 с 4ГБ памяти - 19 секунд.
Для примера распределение времени во втором случае (в первом аналогично пропорционально):
Код: Выделить всё
var tempFile = new FileInfo(Path.GetTempFileName());
tempFile.Delete();
PrinterSettings printSettings;
var oldPaperSize = StiPrintProvider.PaperSizeForUsing;
StiOptions.Print.UsePrinterSettingsEntirely = true;
StiPrintProvider.SetPaperSource = false;
printSettings = new PrinterSettings();
if (PrinterSettings.InstalledPrinters.Count == 0)
{
MessageBox.Show("В системе не установлено ни одного принтера!", "Ошибка пакетной печати");
return;
}
if(printSettings.PaperSources.Count>0)
{
printSettings.DefaultPageSettings.PaperSource = printSettings.PaperSources[0];
StiPrintProvider.SetPaperSource = true;
}
StiPrintProvider.PaperSizeForUsing = printSettings.DefaultPageSettings.PaperSize;
if (printData[0].printerSettings != null)
{
printSettings.Collate = printData[0].printerSettings.Collate;
printSettings.Copies = printData[0].printerSettings.Copies;
printSettings.PrinterName = printData[0].printerSettings.PrinterName;
}
foreach (PrintData data in printData)
{
StiReport subReport;
if (File.Exists(tempFile.FullName))
subReport = StiReport.GetReportFromAssembly(tempFile.FullName, true);
else
{
subReport = new StiReport();
subReport.ReportUnit = StiReportUnitType.Millimeters;
subReport.Load(data.fileName);
subReport.Compile(tempFile.FullName);
}
if (String.IsNullOrEmpty(printerSettings.PrinterName))
CopyPrinterSettings(subReport.PrinterSettings, printerSettings);
else
CopyPrinterSettings(printerSettings, subReport.PrinterSettings);
subReport.PrinterSettings.ShowDialog = false;
if (!String.IsNullOrEmpty(data.Title))
{
if (subReport.CompiledReport != null)
subReport.CompiledReport.ReportName = data.Title;
else
subReport.ReportName = data.Title;
}
subReport.RegData(data.DataSetName, data.DataSetName, data.data);
subReport.Render(false);
subReport.Print(printSettings);
}
StiPrintProvider.PaperSizeForUsing = oldPaperSize;
StiPrintProvider.SetPaperSource = true;
StiOptions.Print.UsePrinterSettingsEntirely = false;
Для примера распределение времени во втором случае (в первом аналогично пропорционально):
Общие рекомендации по повышению быстродействия формирования отчетов
Здравствуйте,
Насколько я вижу из графиков печать занимает гораздо больше времени, чем построение отчета. Процедура печати у нас довольна проста. Состоит из перебора уже построенных страниц и последовательной отрисовке этих страниц на канве принтера. На скорость очень сильно может влиять принтер (и его драйвера), на котором производится печать. К примеру, на некоторых моделей принтеров вот такой код:
PrinterSettings settings = new PrinterSettings();
может отнимать по 5-10 секунд времени. Особенно это актуально для сетевых принтеров. Попробуйте отключить (для эксперимента) все операции с размерами бумаг, настройками принтеров и т.д. Также возможны очень большие задержки из-за размеров бумаги (настройки страницы в внутри отчета), которые не совсем "попадают" в размеры поддерживаемые принтером. Стоит также попробывать установить свойство PaperSize в конкретный размер (по умолчанию задан Custom).
Спасибо.
Насколько я вижу из графиков печать занимает гораздо больше времени, чем построение отчета. Процедура печати у нас довольна проста. Состоит из перебора уже построенных страниц и последовательной отрисовке этих страниц на канве принтера. На скорость очень сильно может влиять принтер (и его драйвера), на котором производится печать. К примеру, на некоторых моделей принтеров вот такой код:
PrinterSettings settings = new PrinterSettings();
может отнимать по 5-10 секунд времени. Особенно это актуально для сетевых принтеров. Попробуйте отключить (для эксперимента) все операции с размерами бумаг, настройками принтеров и т.д. Также возможны очень большие задержки из-за размеров бумаги (настройки страницы в внутри отчета), которые не совсем "попадают" в размеры поддерживаемые принтером. Стоит также попробывать установить свойство PaperSize в конкретный размер (по умолчанию задан Custom).
Спасибо.