我的报告是68,000页,需要以PDF格式生成。 (我把逗号放入,所以你知道这不是一个错字:) 如果我通过SSRS的网站/ WebService生成它,这实际上工作正常。 它需要一点多一点时间才能生成第一页。在此期间,服务器CPU变为100%,内存变为2GB。生成第一页后,CPU和内存都会下降到报告前的状态。现在,如果我选择导出为PDF。服务器上的CPU变为100,但在生成pdf时,内存不会显着跳跃.05GB(50 MB)。这大约需要10-15分钟。
现在,如果我在代码中使用Render方法
rs.Render(Me.ReportName, Me.ContentType, Nothing, Nothing, ....
我将rs.Timeout设置为1800000 //(30分钟)。服务器上的CPU和内存达到峰值并在10分钟后出现内存超出内存异常。我相信服务器而不是带有调用代码的主机(Web服务)。
现在我注意到当PDF通过SSRS网站呈现时,它会创建一个带有参数
的新URLReportSession=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也是可以传递给render方法的内容类型之一。但我找不到一个例子,也没有解释它的作用。
所以在我去掉所有这些兔子洞之前,还有其他人做过这样的事情还是遇到过像这样的项目?
背景:如果我一次生成一页报告,则需要9.5小时才能运行并生成所有PDF。当我能在10分钟内生成整个报告并使用PDFSharp分割报告时,我感到非常兴奋。现在我很可能一次可以生成10,000或20,000,但是当方法有效时我真的很喜欢我,但是我不能在代码中复制它。