我們有一個相當複雜的頁面,可以動態加載用戶控件(其中一些嵌套)。這是一個表現非常慢的頁面。ASP.NET頁面性能
動態添加控件是否會增加瓶頸?如果我們在.NET緩存對象中添加控件,並且在緩存中已經存在的情況下不使用LoadControl,它會有幫助嗎?
任何其他提示/策略使頁面更快?
我們有一個相當複雜的頁面,可以動態加載用戶控件(其中一些嵌套)。這是一個表現非常慢的頁面。ASP.NET頁面性能
動態添加控件是否會增加瓶頸?如果我們在.NET緩存對象中添加控件,並且在緩存中已經存在的情況下不使用LoadControl,它會有幫助嗎?
任何其他提示/策略使頁面更快?
爲您的@Page指令添加Trace =「true」,您將能夠看到哪些方法花費的時間最長。
我懷疑它的動態加載控件的行爲是減慢它和更多的每個控件的行爲。他們全都碰到數據庫嗎?我會看看你是否可以在試圖優化它們的加載之前簡化控件的性能(緩存數據庫調用等)。
我們曾經將ASP.Net項目的性能提高了一個數量級。以下是我們嘗試的一些列表:
我會在頁面上做一些分析,看看真正的減速發生在哪裏。通常根據我的經驗,我認爲可能導致實際減速的不是最慢的點。當事情開始運行緩慢時,我發現最好能夠剖析我的應用程序/頁面,然後給我非常好的信息,說明哪些區域可以加速獲得戲劇性的改進。你可能會發現數據庫調用太多,或用戶控件加載,或者你沒有考慮過的其他東西。
如果簡單地加載控件動態地產生大的性能成本,我會有點驚訝。但是,如果有很多控件,並且它們深深嵌套,則ASP.NET有時會很慢地將它們呈現爲html。很顯然,按照其他人的建議來確定你的瓶頸究竟在哪裏。
對於一個複雜的頁面來說,檢查呈現的html的大小是一件事。有了許多服務器控件,頁面大小可以快速攀升到幾兆字節。打開或調整http壓縮可能是您正在尋找的答案。
調查性能問題的第一步是確定瓶頸:它是網絡流量(太多的HTTP請求?太多的HTML來自管道?)或CPU綁定在服務器上?或數據庫調用過多?
在許多情況下,頁面的大小會導致速度減慢。如果你在頁面上包含很多控件,那麼會有很多HTML,所以如果你在最終的渲染產品上查看源代碼並找到20000行HTML/javascript,那麼很可能是因爲減速太多數據通過網絡發送。
我建議使用像YSlow這樣的工具來幫助您更好地理解最終呈現的產品。
關鍵項目看:
裝載用戶控制動態絕對不是性能下降的原因。通常阻礙ASPX頁面性能的一件事就是viewstate。我建議將視圖狀態從頁面中移出[即使您已經在某些控件上啓用了它]。
將完整的viewstate存儲爲服務器上的會話變量,並僅在viewstate字段中傳輸標識符。您可以查看完整的文章here,文章還提供了性能度量指標。
網頁的緩慢表現有很多原因。你真的需要使用一些像性能嚮導這樣的工具來開始瞭解正在發生的事情。
我們最新的性能問題歸結爲匿名類型和linq。由於所有的JIT編譯都在進行,所以用這兩件事情來殺死性能是非常容易的。
不要猜測。測量。 – 2009-04-30 16:17:54