問題是呈現巨大的報告。基本上我們有大量的數據在html報告中呈現(大部分使用中繼器或gridview)。正如它發生的那樣,數據開始很小,現在我們有很多。有很多這樣的報告已經建成,所以全面重寫不是一種選擇。哎呀,這家公司甚至沒有讓我們分頁數據。 現在每次我們嘗試渲染一些報告時,服務器內存都會彈出。所以問題是 - 有沒有什麼辦法可以將數據綁定到中繼器,並在大塊準備好時將它流式傳輸到瀏覽器?那樣我們希望不要一次將所有數據帶入應用服務器。我想我們會使用數據讀取器或其他東西來獲取部分數據並將其呈現給瀏覽器。任何指針,鏈接,想法?呈現asp.net轉發器as-and-when html準備就緒(流式傳輸)
回答
你有幾個選擇,但你不能使用中繼器來做到這一點。
ASP.NET將不會輸出在ASPX中定義的HTML,直到它遇到the rendering stage of the page lifecycle。在此之前,頁面(在Page_Init,Page_Load等)中幾乎可能會發生任何事情:它可能會向頁面添加或刪除控件,它可能會綁定數據源等。因此,無法知道要發送到客戶端。
一個選項是使用AJAX從客戶端構建報表:首先加載HTML,然後使用對服務器的增量調用修改它,直到消耗完所有報表數據。這可以讓你把報告分成任何你想要的大小,但它可能會變得相當複雜。 (在另一方面,也許有人已經建立了管制,以促進這一點。)
另一個選項是在你的代碼隱藏類手動把你的HTML生成的控制和寫整個頁面(而不是使用一個不錯的,易於閱讀的.aspx模板)。要看到這個動作,創建一個完全空白的.aspx(除了@Page
聲明),並且把這種在其Page_Load
方法:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("<html><body><ul>");
// this could be iterating a data reader
for(int i=0; i<5; i++)
{
Response.Write("<li>Item " + i.ToString() + "</li>");
// you might tweak your buffer settings instead of flushing on
// each write - this is just for demonstration purposes
Response.Flush();
// this just dramatizes the fact that it's streaming
// by adding a two-second delay
System.Threading.Thread.Sleep(2000);
}
Response.Write("</ul></body></html>");
}
在這種情況下Response.Write是你的朋友。不幸的是,你會放棄數據綁定和中繼器的細節。這裏是一個鏈接http://highscalability.com/plentyoffish-architecture
感謝您的鏈接。我一直懷疑你必須超越asp.net控件才能在嚴重負載下工作。這只是證實了它。基本上你的和傑夫的答案指出了我應該採取的一般方向,我一定會開始考慮這些方面。 – sash 2010-04-23 14:36:58
這將是jQuery的無限滾動一個有趣的解決方案。
http://www.infinite-scroll.com/
因爲,你是不是允許執行分頁您可以滾動罰球也只有這樣的記錄是從數據庫中獲取和顯示。其中一個問題是您需要使用JavaScript動態地將行添加到GridView控件。
將其視爲Google Reader,您可以向下滾動Feed,然後加載所有Feed。
我將探索無限滾動。我在幾個網站中看到了這些實現,這看起來很有前景。萬分感謝。 – sash 2010-04-23 14:39:28
- 1. admin模板asp.net表單準備就緒
- 2. Phonegap ondevice準備就緒
- 3. dom準備就緒但未呈現的Javascript事件
- 4. Zend Framework輸出就緒準備語句
- 5. jquery文檔準備就緒
- 6. 顯示DOM準備就緒
- 7. MediaFoundation - 框架已準備就緒?
- 8. 準備就緒的.NET項目模板
- 9. DOM在Dartium中準備就緒
- 10. Javascript! IE文件準備就緒狀態
- 11. 谷歌應用程序準備就緒
- 12. $()。被ajax調用後準備就緒
- 13. 確定圖例何時準備就緒
- 14. 如何確保UIActivityViewController呈現時UIActivityItemProvider的項目已準備就緒?
- 15. 試圖呈現「加載」提示,但數據一旦準備就緒
- 16. 僅當數據在Ionic 2中準備就緒時才呈現模板
- 17. $ ionicPlatform.ready在設備準備就緒之前觸發
- 18. XML準備就緒,Java未成功
- 19. DOM準備就緒後刪除元素
- 20. 等待,而文件已準備就緒
- 21. javascript更改div文本準備就緒
- 22. 知道gotoAndPlay是否準備就緒
- 23. 準備好塊並在準備就緒後執行隊列
- 24. 在瀏覽器上輸入網址時,設備未準備就緒錯誤
- 25. 在文檔準備就緒時清除的輸入字段
- 26. ASP.Net Ajax UpdatePanel僅在頁面準備就緒後加載
- 27. 使ASP.NET MVC應用程序Web Farm準備就緒
- 28. 揭示模塊模式和文檔已準備就緒
- 29. .load()在圖像準備就緒前觸發
- 30. 在文檔準備就緒時觸發jQuery更改功能
我在想這些方面。無論如何,它在php和其他web堆棧中都以這種方式工作。謝謝你的時間。 – sash 2010-04-23 14:42:15