Как повысить производительность метода LocalReport.Render при экспорте PDF из .rdlc в коде?

Я хочу отображать большие неграфические отчеты (тысячи страниц) на уровне кода, опуская элемент управления ReportViewer, который просто забивает браузер, из файлов .rdlc. Когда я тестирую отчет, который содержит около 2000 страниц, метод Microsoft.Reporting.WebForms.LocalReport.Render занимает примерно полчаса, что считается плохим пользовательским интерфейсом.

Есть ли какие-то приемы или альтернативные решения для повышения производительности рендеринга: в коде, перепроектирование файла .rdlc или где-то еще, например, просто увеличение аппаратного обеспечения?

Пример кода:

LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/report.rdlc");

SetDataSources(ref localReport);

string reportType = "PDF";
string mimeType;
string encoding;
string fileNameExtension;

string deviceInfo =
"<DeviceInfo>" +
"  <OutputFormat>PDF</OutputFormat>" +
"  <PageWidth>8.5in</PageWidth>" +
"  <PageHeight>11in</PageHeight>" +
"  <MarginTop>0in</MarginTop>" +
"  <MarginLeft>0in</MarginLeft>" +
"  <MarginRight>0in</MarginRight>" +
"  <MarginBottom>0in</MarginBottom>" +
"</DeviceInfo>";
}

Warning[] warnings;
string[] streams;
byte[] renderedBytes;

//Render the report
renderedBytes = localReport.Render(
            reportType,
            deviceInfo,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

Любая помощь приветствуется, заранее спасибо!


person anssi    schedule 24.10.2011    source источник


Ответы (5)


Размещение <trust legacyCasModel="true" level="Full"/> внутри тега <system.web> в web.config помогло мне. Подробнее здесь

person Santiago quits SO    schedule 04.05.2018

возврат datatable, так как источник данных работает намного быстрее, чем список объектов

person DkDev    schedule 12.04.2013

Для создания больших PDF-файлов требуется память, но есть хитрость, позволяющая оптимизировать использование памяти, если вам нужно:

  1. создать отчет в виде отдельных PDF-документов объемом до 5–10 страниц (используя специальные библиотеки PDF, такие как бесплатные iTextSharp). или PDF File Writer
  2. затем объедините все эти PDF-файлы в один большой PDF-документ.

Этот метод также полезен, поскольку вы контролируете ход создания отчета.

person Eugene    schedule 10.02.2015

Удалите все выражения в отчете SSRS. Любое условное форматирование, раскрашивание и чередование строк должны значительно сократить время загрузки.

person rmehra76    schedule 20.04.2018

Невозможно улучшить производительность RDLC на приемлемом уровне скорости после моего 5-месячного исследования. RDLC создан для ПРОСТОГО отчета, такого как квитанция и счет-фактура. Использование html — лучший вариант для приемлемой скорости загрузки и рендеринга, если количество страниц отчета больше 100 без каких-либо внутренних выражений или больше 50 страниц с динамическими внутренними выражениями.

person John Wang    schedule 15.01.2021