語言: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 =真
生成的頁面有多大? –
43行,猜測每行約1釐米,頭部約2.5釐米。 – HouseCat
這不是我的意思。我的意思是,當您將生成的頁面保存到磁盤時,它佔用了多少空間? 1-5梅格斯? –