6

更新 2.4.2010 是的,这是一个老问题,但我想我会提供更新。所以,我再次使用 ReportViewer,它在初始加载时仍然呈现缓慢。唯一的区别是 SQL 数据库位于报告服务器上。


更新 3.16.2009

我已经完成了分析,并不是 SQL 导致 ReportViewer 在第一次调用时呈现缓慢。在第一次调用时,ReportViewer 控件锁定 UI 线程并使程序无响应。大约 5 秒后,ReportViewer 将解锁 UI 线程并显示“正在生成报告”,然后最终显示报告。我知道 5 秒并不多,但这不应该发生。我的同事在他的程序中做同样的事情,并且 ReportViewer 会根据任何请求立即显示“正在生成报告”。

唯一的区别是报告服务器在一台服务器上,而数据在另一台服务器上。但是,当我在 SSRS 中开发报告时,没有任何延迟。


更新

我注意到只有第一次加载 ReportViewer 需要很长时间;相同或不同报告的每个后续加载都加载得很快。


我有一个在远程处理模式下使用的WinForms ReportViewer,当调用 ReportViewer.RefreshReport() 方法时,它最多可能需要 30 秒才能呈现。但是,报告本身运行得很快。

这是设置我的 ReportViewer 的代码:

rvReport.ProcessingMode = ProcessingMode.Remote
rvReport.ShowParameterPrompts = False
rvReport.ServerReport.ReportServerUrl = New Uri(_reportServerURL)
rvReport.ServerReport.ReportPath = _reportPath

这是 ReportViewer 最多可能需要 30 秒才能呈现的地方:

rvReport.RefreshReport()
4

11 回答 11

4

我在其他论坛上找到了答案。 MSDN解释说,一个 DLL 正在搜索一些 Verisign Web 服务器并且它需要永远......有两种方法可以关闭它,一种是 Internet Explorer 中的复选框,另一种是在应用程序的 app.config 文件中添加一些行.

于 2010-04-29T19:11:21.007 回答
3

总结已经提出的各种想法,可以是

  • 客户端上报表查看器基础结构的启动时间
  • 客户端缓存加载时间
  • 服务器上的查询执行时间
  • 报告服务器的渲染时间

尝试运行报告,关闭客户端,重新启动客户端并再次运行报告。如果第二次报告速度快得多,请重复此实验,但在报告运行之间加载、运行和卸载另一个大型应用程序。

如果第二个报告的运行速度继续快得多,那么您看到的差异更多地与 SQL Server 的 I/O 缓存有关,而不是客户端上发生的情况。您可以通过运行一个从报表中未使用的表中提取大量数据的查询来故意替换 MSSQL 缓存,从而进一步测试这一点。

以上所有内容都很有趣,但并不重要。如果您想确保快速的报告响应,Reporting Services 为计划生成报告提供了广泛的支持,这样当消费者请求报告时,唯一的延迟就是网络传递。

如果您的用户坚持报告最新(实时)数据,他们将不得不指定更严格的约束参数或习惯等待。

于 2009-03-17T00:46:25.100 回答
3

您可以在本地和服务器两种模式下提取报告。如果您在本地模式下运行,它将把数据和报告定义都拉到您的机器上,然后将它们都渲染。在服务器模式下,它将让 SSRS 完成所有工作,然后拉回信息进行渲染。

如果您使用的是本地模式,则可能是硬件问题。如果您有一个庞大的数据集,那么需要将大量数据存储在内存中。

除此之外,这不是很多信息可以继续......

更新:由于您注意到这只是第一次调用需要一段时间,您是否进行了任何分析以确定大部分工作是在后端 SQL 调用上完成还是花费在实际的报告呈现中?

如果后续调用速度更快,则您可能(顺便)在一个或另一个级别缓存。您可以缓存报告(http://www.sqlservercurry.com/2007/12/configure-report-to-be-cached-ssrs-2005.html)或者可能是正在缓存返回数据的执行计划深入 SQL Server。

于 2009-01-10T03:57:51.887 回答
3

ReportServer 总是需要一段时间才能唤醒,因为它在 IIS 下运行。每个 AppPool 都有一个进程超时。我们的 ASP.NET 应用程序的报表查看器也有同样的问题。您可以尝试在 IIS 设置中增加 AppPool 保持活动时间。

看这里:

我假设您当然正在运行 SQL2005 SSRS。

一种选择是升级到 SSRS 不再依赖 IIS 的 2008。

于 2009-03-16T12:10:51.750 回答
2

开箱即用的思考方式:报表服务器是否与运行应用程序的机器不同?网络可能需要很长时间才能解析“reportServerURL”。一旦解析,名称将被缓存,因此后续调用会更快..

我之前遇到过配置错误的 DNS 服务器的问题。尝试将“reportServerUrl”替换为“reportServerIPAddress”并查看对 ReportViewer 的初始调用是否更快。

于 2009-01-17T18:49:08.787 回答
2

我遇到了同样的问题。

我发现更改默认打印机(此处网络速度慢)可以解决问题。

ReportViewer 从默认打印机获取一些信息,由于这里的网络非常慢,我有 10 秒的延迟

希望能帮助到你

于 2010-04-16T20:46:14.103 回答
1

好像您要直接跟踪 SSRS 报告。您可能想要改为使用 SSRS Web 服务。这可能会提高你的表现。

于 2009-03-17T12:07:10.520 回答
1

更新

我注意到只有第一次加载 ReportViewer 需要很长时间;相同或不同报告的每个后续加载都加载得很快。

于 2009-01-14T15:34:17.500 回答
1

您已设置为在服务器上运行,这意味着 SRS 服务器需要在第一次进行渲染时会因以下一个或所有原因而延迟(这些是最慢的,还有其他的,但它们是更快):

  • DNS解析:需要将URL解析为IP地址。完成此操作后,它会在本地缓存,从而加快速度。
  • ASP.NET/IIS 需要时间来预热。必须进行各种编译和初始加载 - 加载后它将保留在服务器内存中,直到您重新启动 IIS 或发生默认清理时间。
  • Reporting Services 需要时间来预热,就像 ASP.NET/IIS 一样。

要对此进行测试,请使用网络监视器,例如Netmon(如果您是 Microsoft 粉丝)或Wireshark(我的建议),并观察从您的计算机到服务器的流量。您将看到 DNS 请求,然后是 HTTP 请求,延迟将出现在返回的数据中。在第二次调用时,您会看到返回和 DNS 检查的速度大不相同。

为了防止这种情况,您可以做一个预热脚本 - 我不知道 SRS 有一个,但这里有一个指向 SharePoint 的链接,因为它具有完全相同的问题,所以不难更改。

于 2009-03-11T11:26:14.460 回答
0

据我所知,我认为这是微软很难解决的问题。

最初,报告加载器仅在报告的首次渲染时很慢,随后的报告加载正常(快一点)。

为了帮助解决这个问题,请放置一个带有标签 (Label1) 和计时器 (Timer1) 控件的启动窗体。设置 Label1.Text="请等待(大约 15 秒)"。设置 Timer1.Interval=3。在 Startup Form 的 form_Load 事件中,设置 Timer1.Start。在 Timer1 的 Tick 事件中放置“frmMyReportForm.reportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.Normal)”

“frmMyReportForm” 项目中包含reportviewer 控件的任何表单。

所有的延迟都会在这里捕获,这样当您生成实际报告时,就不会出现延迟。

我希望这可能对我的开发人员有帮助。

于 2014-03-04T12:42:08.870 回答
0

这是您的问题的可能解决方案:在使用应用程序访问任何报告之前,尝试从 Web 访问第一个报告。

如果问题没有出现,您可以创建一个“预加载”第一个报告的应用程序,以允许报告服务启动。

我已经在 Microsoft 的一些演示应用程序中看到了这种解决方案。使用 Analysis Services 和 Reporting Services 的应用程序。

否则祝你好运

于 2009-03-17T14:59:10.823 回答