Генерация SSRS через веб-сайт, в порядке - через код, из памяти - PullRequest
1 голос
/ 04 мая 2011

У меня есть отчет, который составляет 68 000 страниц плюс, который должен быть создан в PDF. (Я вставил запятую, чтобы вы знали, что это не опечатка :) И это на самом деле работает нормально, если я сгенерирую его через сайт / веб-сервис SSRS. Это занимает чуть более минуты и генерирует первую страницу. За это время процессор сервера уходит на 100%, а память на 2 ГБ. После того, как первая страница сгенерирована, и CPU, и Memory раскрываются до состояния предварительного отчета. Теперь, если я решу экспортировать в PDF. Процессор на сервере переходит на 100, но объем памяти существенно не увеличивается, возможно, 0,05 ГБ (50 МБ) при создании файла PDF. Это занимает около 10-15 минут.

Теперь, если я использую метод Render в коде

rs.Render(Me.ReportName, Me.ContentType, Nothing, Nothing, ....

Я установил rs.Timeout на 1800000 // (30 минут). Процессор и память на сервере всплески, и примерно через 10 минут я получаю исключение памяти. Я считаю, что с сервера, а не хост-машины с кодом вызова (веб-службы).

Теперь я заметил, что при рендеринге PDF через веб-сайт SSRS создается новый URL с параметрами

ReportSession=gvrjxt4504wtpkiydu0o51fo
ControlID=5754f0889fb34bea80e7b5e97c120cfd
Culture=1033
UICulture=9
ReportStack=1
OpType=Export
FileName=Invoice+Session+Register+Batch
ContentDisposition=OnlyHtmlInline
Format=PDF

Теперь я считаю, что именно этот ReportSession или ControlId не позволяет генерации PDF занимать так много памяти.

В любом случае, мой вопрос заключается в том, как можно с помощью кода имитировать поведение, которое показывает Веб-сайт?

Я собираюсь изучить метод LoadReport, а также NULL - это один из типов контента, который вы можете передать методу рендеринга. Но я не могу найти ни пример, ни объяснение того, что он делает.

Итак, прежде чем я спущусь по всем этим кроличьим норам, кто-нибудь еще делал что-то подобное или сталкивался с таким проектом?

Справочная информация: Если я сгенерирую отчет по одной странице за раз, потребуется 9,5 часов для запуска и создания всех PDF-файлов. Я был очень взволнован, когда смог создать весь отчет за 10 минут и использовать PDFSharp для разделения отчета. Теперь я, скорее всего, могу генерировать 10 000 или 20 000 за один раз, но это действительно раздражает меня, когда метод работает, но я не могу дублировать его в коде.

...