【发布时间】:2016-03-22 12:54:53
【问题描述】:
语言:C#
工具:Visual Studio 2010
NET:.NET 4.0 和 ASP.NET WebForms
报告查看器 v.10
我是一名新的 Web 开发人员,通常是桌面应用程序专家,我没有学习这些东西的导师或指导,所以我想我会问 StackOverflow。
问题:ReportViewer 在开始渲染到屏幕之前有很长的暂停/延迟。我正在尝试确定我是否了解进程堆栈。
我正在从 Oracle SQL 检索一个大型数据集,单个表中约有 90,000 个项目。查询是通过自定义对象和添加参数构建的。我认为它是用于简化 ODBC 连接或其他东西的包装器。这可能是第一个瓶颈。您可能会问,RagingCain,您为什么不直接研究一下?事实上,有几十万行代码我和我的团队都没有写过。以前的团队显然是按线路/每小时付费的,整个项目都是意大利面条。我根本不能把我很少的时间花在深潜上,除非我能更好地指出前面的障碍。
查询在服务器端总共执行了大约 11700 毫秒。 ReportView 初始渲染时间为 300~500 毫秒,然后再加载数据 5000 毫秒。奇怪的是,在完成查询和 ReportViewer 的初始呈现之间需要 10~20 秒。我终于在创建 DataSet 检索之前和之后计时,它需要 11 到 12 秒。现在,这 11 到 12 秒还包括执行查询所需的时间。这留下了 10 到 15 秒的间隔,我无法解释。
起初我认为是 ReportViewer 在 UpdatePanels/AJAX 中表现得很奇怪。当然,在最初的开发过程中,我处理了 Asynchronous/TimeOuts 异常的发生和 OutOfMemory 异常。我解决了所有这些问题并消除了它们作为可能的原因。发生的未处理或已处理异常为零,也可能是罪魁祸首,并且根本不涉及 JavaScript。我将其隔离为执行查询、分配 DataSet、设置 ReportViewer 数据源、绑定和刷新。查询之后和设置 ReportViewer 数据源之前的时间间隔很大。
让我感到困惑的一个事实是,我假设 DataSet 用数据“填充”,而不是像文件一样通过网络在一个大对象中传输。如果 Query 需要 7 秒,我的印象是,DataSet 需要大约相同的时间来分配。尽管延迟似乎大致是将 DataSet 发送到客户端(然后在 LocalProcessing 中使用)所花费的时间。
工作流程:
客户端发起查询事件
WebServer 上的 C# BackEnd 告诉 PL/SQL 服务器要执行哪个过程
PL/SQL Server 执行过程
C# BackEnd 从 SQL/Server 检索 DataSet
将数据从 Web 服务器发送到客户端
客户端处理数据集上的 ReportViewer
我的理解正确吗?
这是我在幕后看到的数据传输吗?
我可以(高级)做什么来优化流程?
请记住,LocalProcessing 在 ReportViewer 上用于启用超链接,我被告知在 RemoteProcessing 上不可用。
ReportViewer 属性集:
ProcessingMode = LocalProcessing
超链接 = 已启用
异步渲染 = True
SizeReportToPageContent = True
【问题讨论】:
-
生成的页面有多大?
-
43 行,猜测每行大约 1 厘米,标题为 2.5 厘米。
-
我不是这个意思。我的意思是当您将生成的页面保存到磁盘时,它占用了多少空间? 1-5 兆?
-
我不知道如何计算。
-
生成报告,然后在浏览器中点击文件->保存。保存的文件将让您快速估计页面大小。
标签: c# asp.net .net plsql reportviewer