语言:C#
工具:Visual Studio 2010
NET:.NET 4.0和ASP.NET WebForms
ReportViewer v.10
我是一名新的网络开发人员,通常是桌面应用程序人员,我没有导师或指导学习这些东西,所以我想我会问StackOverflow。
问题:ReportViewer在开始渲染到屏幕之前有一个很长的暂停/延迟。我想确定我是否理解过程堆栈。
我正在从Oracle SQL中检索单个表中大约90,000个项目的大型DataSet。 Query通过自定义对象构建并添加参数。我认为它是简化ODBC连接或其他东西的包装器。这可能是第一个瓶颈。你可能会问,RagingCain,为什么不直接调查它?事实是,我和我的团队都没有编写过几十万行代码。之前的团队显然是按线/每小时付费,整个项目是意大利面条。我只是不能花很少的时间深潜,除非,我可以更好地指出前面的支撑。
查询在服务器端执行总共大约11700ms。 ReportView初始渲染为300~500ms,然后另外5000ms加载数据。奇怪的是,在完成的查询和ReportViewer的初始渲染之间需要10~20秒。我终于在创建DataSet检索之前和之后计时,它需要11到12秒。现在,11到12秒还包括执行查询所需的时间。这留下了10到15秒的差距,我无法解释。
我起初认为ReportViewer对UpdatePanels / AJAX表现得很奇怪。当然,在初始开发期间,我处理了Asynchronous / TimeOuts异常发生和OutOfMemory异常。我解决了所有这些问题,并将其作为可能的原因予以消除。有零个未处理或处理的异常,也可能是罪魁祸首,根本没有涉及JavaScript。我已将其分离为执行查询,分配DataSet,设置ReportViewer数据源,绑定和刷新。查询之后和设置ReportViewer数据源之前会出现较大的时间差。
让我感到困惑的一个事实是我假设DataSets" fill"数据,不通过网络在一个大对象(如文件)中传输。如果Query占用了7秒钟,那么我的印象是,DataSet需要大约相同的时间进行分配。虽然延迟可能大致是将DataSet发送到客户端所需的时间(然后在LocalProcessing中使用。)
工作流程:
客户端启动查询事件
WebServer上的C#BackEnd告诉PL / SQL服务器执行哪个程序
PL / SQL Server执行过程
C#BackEnd从SQL / Server检索DataSet
从Web服务器向客户端发送数据
ReportViewer on Client Processes DataSet
我的理解是否正确?
这是我在幕后看到的数据传输吗?
我(高级别)可以做些什么来优化流程?
请记住在ReportViewer上使用LocalProcessing来启用HyperLinks,我被告知在RemoteProcessing上不可用。
ReportViewer属性集:
ProcessingMode = LocalProcessing
HyperLinks =启用
AsynchRendering = True
SizeReportToPageContent = True
答案 0 :(得分:0)
尝试启用tracing
如果启用了跟踪,则在请求页面时,ASP.NET会向页面附加一系列表,其中包含有关页面请求的执行详细信息。
生成的表格包含有关渲染页面事件所花费的时间的详细统计信息。
要查看跟踪查看器的跟踪,请将其添加到web.config:
<configuration>
<system.web>
<trace enabled="true" pageOutput="false" requestLimit="40" localOnly="false"/>
</system.web>
</configuration>
然后正常访问您的应用程序,当您想要查看跟踪时,请导航到应用程序根目录中的Trace.axd。
例如,如果您的应用程序的网址为http://localhost/SampleApplication,请导航至http://localhost/SampleApplication/trace.axd以查看该应用程序的跟踪信息。