Bry*_*oth 6 vb.net performance reportviewer reporting-services
更新2.4.2010 是的,这是一个老问题,但我想我会给出更新.所以,我再次使用ReportViewer,它仍然在初始加载时缓慢渲染.唯一的区别是SQL数据库位于报告服务器上.
更新3.16.2009
我已经完成了分析,并且不是SQL在第一次调用时使ReportViewer缓慢渲染.在第一次调用时,ReportViewer控件会锁定UI线程并使程序无响应.大约5秒后,ReportViewer将解锁UI线程并显示"正在生成报告",然后最终显示报告.我知道5秒并不多,但这不应该发生.我的同事在他的程序中执行相同的操作,并且ReportViewer会根据任何请求立即显示"正在生成报告".
唯一的区别是报告服务器位于一台服务器上,而数据位于另一台服务器上.但是,当我在SSRS中开发报告时,没有延迟.
UPDATE
我注意到只有第一次加载ReportViewer需要很长时间; 相同或不同报告的每个后续加载都会快速加载.
我有一个WinForms ReportViewer,我在远程处理模式下使用,当调用ReportViewer.RefreshReport()方法时,渲染最多可能需要30秒.但是,报告本身运行得很快.
这是设置ReportViewer的代码:
rvReport.ProcessingMode = ProcessingMode.Remote
rvReport.ShowParameterPrompts = False
rvReport.ServerReport.ReportServerUrl = New Uri(_reportServerURL)
rvReport.ServerReport.ReportPath = _reportPath
Run Code Online (Sandbox Code Playgroud)
这是ReportViewer最多需要30秒才能呈现的地方:
rvReport.RefreshReport()
Run Code Online (Sandbox Code Playgroud)
您可以通过两种模式提取报告:本地模式和服务器模式。如果您在本地模式下运行,它将把数据和报告定义拉到您的计算机上,然后渲染它们。在服务器模式下,它将让 SSRS 完成所有工作,然后拉回信息进行渲染。
如果您使用本地模式,则可能是硬件问题。如果您有一个巨大的数据集,则需要在内存中存储 大量数据。
除此之外,没有太多信息可以继续......
更新:由于您已经注意到这只是第一个调用需要一段时间,因此您是否进行过任何分析来确定大部分工作是在后端 SQL 调用上完成还是花费在实际的报表渲染中?
如果后续调用速度更快,则您可能(顺便)在某一级别进行缓存。您可以缓存报告(http://www.sqlservercurry.com/2007/12/configure-report-to-be-cached-ssrs-2005.html),或者可能正在缓存返回数据的执行计划深入 SQL Server。