2016-03-22 27 views
1

語言:C#
工具:Visual Studio 2010中
NET:.NET 4.0和ASP.NET的WebForms
的ReportViewer 10節與ASP.NET的ReportViewer,LocalProcessing和數據集

我是一個新的網頁開發人員,通常是一個桌面應用程序的人,我沒有一個學習這些東西的導師或指導,所以我想我會問StackOverflow。

問題:ReportViewer在開始渲染到屏幕之前有很長的暫停/延遲。我正試圖確定是否理解過程堆棧。

我從Oracle SQL中檢索一個大型數據集,大約90,000個項目在單個表中。查詢是通過自定義對象和添加參數構建的。我認爲這是一個簡化ODBC連接的包裝或其他東西。這可能是第一個瓶頸。你可能會問,RagingCain,你爲什麼不直視它呢?事實是,我和我的團隊都沒有寫過幾十萬行代碼。前一隊顯然每小時收費,整個項目都是意大利麪條。我根本無法花很少的時間深潛,除非,我可以更好地指出前面的舉動。

該查詢在服務器端執行總計大約11700毫秒。 ReportView初始渲染爲300〜500ms,然後再加載5000ms數據。奇怪的是,在完成的查詢和ReportViewer的初始渲染之間需要10〜20秒。我終於在創建DataSet檢索之前和之後計時,它需要11到12秒的時間。現在,這11到12秒還包括執行查詢所花費的時間。這留下了10至15秒的差距,我無法解釋。

我起初以爲這是ReportViewer與UpdatePanels/AJAX行爲怪異。在最初的開發過程中,當然,我處理異步/ TimeOuts異常發生和OutOfMemory異常。我解決了所有這些問題,並將其排除在可能的原因之外。沒有任何未處理或處理的異常發生,也可能是罪魁禍首,並且根本不涉及JavaScript。我已經將它隔離爲執行查詢,分配數據集,設置ReportViewer數據源,綁定和刷新。查詢之後和設置ReportViewer數據源之前發生較大的時間間隔。

讓我感到困惑的一個事實是,我假定DataSet用數據「填充」,而不是像網絡上的文件那樣在一個大對象中傳輸。如果查詢耗時7秒,我的印象就很糟糕,數據集大約需要分配的時間。看來,雖然該延遲可大致需要發送數據集到客戶端的時間

工作流程(然後在LocalProcessing使用。):
客戶端開始查詢事件
C#後端的Web服務器告訴PL/SQL服務器,程序執行
PL/SQL Server執行過程
C#後端檢索數據集從SQL /服務器
從Web服務器發送數據到客戶
的ReportViewer上的客戶端進程的DataSet

我的理解是否正確?
這是我在幕後看到的數據傳輸嗎?
我可以(高級別)做什麼來優化流程?

請記住在ReportViewer上使用LocalProcessing來啓用超鏈接,但我被告知在RemoteProcessing中不可用。

的ReportViewer屬性進行設置:
ProcessingMode = LocalProcessing
超鏈接=啓用
AsynchRendering =真
SizeReportToPageContent =真

+0

生成的頁面有多大? –

+0

43行,猜測每行約1釐米,頭部約2.5釐米。 – HouseCat

+0

這不是我的意思。我的意思是,當您將生成的頁面保存到磁盤時,它佔用了多少空間? 1-5梅格斯? –

回答

0

嘗試啓用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以查看該應用程序的跟蹤信息。

+0

無論如何手動移動跟蹤輸出位置?它嵌入在一些控件背後,難以閱讀。 – HouseCat

+0

更新了我的答案... –

+0

我有跟蹤,研究如何在查詢運行後觸發跟蹤更新。 – HouseCat