【问题标题】:ASP.NET with ReportViewer, LocalProcessing, and DataSets带有 ReportViewer、LocalProcessing 和 DataSet 的 ASP.NET
【发布时间】: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


【解决方案1】:

尝试启用tracing

如果启用了跟踪,当页面被请求时,ASP.NET 会在页面上附加一系列表,其中包含有关页面请求的执行详细信息。

生成的表格包含有关渲染页面事件所花费时间的详细统计信息。

要使用跟踪查看器查看跟踪,请将其添加到您的 web.config:

<configuration>
  <system.web>
    <trace enabled="true" pageOutput="false" requestLimit="40" localOnly="false"/>
  </system.web>
</configuration>

然后正常访问您的应用程序,当您想查看跟踪时,导航到应用程序根目录中的 Trace.axd。

例如,如果您的应用程序的 URL 是 http://localhost/SampleApplication,请导航到 http://localhost/SampleApplication/trace.axd 以查看该应用程序的跟踪信息。

【讨论】:

  • 无论如何手动移动跟踪输出位置?它嵌入在某些控件后面,难以阅读。
  • 我有跟踪,正在研究如何在查询运行后触发跟踪更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多