2010-08-11 57 views
4

asp.net中的UserControls是否會降低性能。asp.net和性能中的UserControls

MasterPage擁有自己的生命週期 Page擁有自己的生命週期和 UserControls擁有自己的生命週期。

UserControls有助於劃分工作量並且易於維護,但UserControls會降低對asp.net應用程序性能的評分

回答

5

我從來沒有見過它們會降低性能,除非你做了一些愚蠢的事情,讓每個用戶控件負責它自己的數據庫查找,然後將它們綁定在Repeater或類似的東西中。如果你使用常識,他們不應該顯着降低性能。但是,如果你正在談論優化到處理器週期,然而我猜測他們不會因爲如何將所有東西編譯到MSIL,然後編譯到機器代碼中,所以我猜測編譯器可以將它整理出來並且不會像直接在頁面上擁有所有組成控件一樣對待用戶控件。
編輯 - 添加

This article認爲他們如何能真正提高性能。有趣。

除了他們的可重用性和靈活性 ,Web用戶控件可以 採取ASP.NET緩存 引擎的優勢,以實現所謂 爲「片段緩存。」從本質上講, 片段緩存允許網絡 開發商控制頁面上各個控件的HTML緩存 , 包括設置時間和 緩存 控制的各種版本的基礎上查詢字符串,控制 性能,瀏覽器類型,甚至 卡斯特om字符串。緩存 唯一的網頁部分的功能是非常強大 因爲頁面的一部分往往會存儲 訪問相對靜態的數據在關係數據庫中或通過XML Web服務訪問 ,而同一頁的 其他部分 操縱動態數據。對於這些 靜態部分,創建Web用戶控制和設置緩存選項 大大減少了數據庫往返次數,從而提高了 的性能。在大多數情況下,使用 明智地ASP.NET緩存是 單個最大性能改進 可以做出。

好問題。再次,我學到了一些新東西。謝謝。

3

不多也不少於添加到頁面的任何其他控件。請記住,每個您添加到頁面的服務器控件都擁有相同的生命週期。

當然,這是假設你(或其他開發人員)不會採取某些措施來積極地降低性能(即,使其數到每十億頁page_load將無助於性能)。


編輯

好了,這裏的東西。

首先,您要求回答「是否依賴」的問題是/否回答。答案是「取決於」,因爲我不知道用戶控件如何在相關代碼中受到折磨。

其次,我將在此處添加更多文本。基本上我會用大約1000字重複上面四句話所說的話。所以......

如果您採用全新的用戶控件。不要在CodeBehind中添加任何代碼。不要在ASPX端放置任何服務器控件。

然後,如何影響性能將不會有什麼區別,比添加一個Asp:Button或ASP:標籤設計器會影響性能。

要清楚:直到你添加東西到一個用戶控件,它不會對網站的性能產生影響,也不會比任何服務器端控件更具影響力。

會對性能產生「影響」嗎?技術上,是的,但有效,不。

而這是一個非常重要的區別。請記住,每個服務器端控件都會對性能產生一點影響。它們是實例化的對象,實例化的對象消耗內存和資源。當然,這種影響可以忽略不計,當你將數百個控件(服務器或用戶)添加到頁面時,我只會認爲這種微小的影響是「退化」。

用戶控件的使用不是您需要關注的地方。

您的關注需要落實到用戶控制的實施中。

當程序員進入該CodeBehind並開始做愚蠢的事情吃掉內存和處理器週期,事情開始退化時。或者,程序員如何實現用戶控制可以提高Web應用程序的性能(如David所述here)。


編輯2

的問題「一般不管是很好用的用戶控件與不這樣做同樣的工作」是不是你上面問了這個問題。如果你正在做的任務會降低性能,那麼如果你的任務是在用戶控制之下,那麼這並不重要。另外,如果這是一個好主意,則取決於項目,團隊,範圍甚至設計範例。

  • 對於「一般來說,使用用戶控件是否存在性能下降」的答案是「實際上沒有」。
  • 「一般來說,這是一個好主意」的答案是「這取決於」。
  • 對於「一般來說,一個任務在一個用戶控件中是否會更好」的答案是「它取決於」。「

沒有關於你的具體情況(代碼基礎,設計,開發團隊,維護團隊等)的細節不能有一個更好的答案。

我已經在那裏使用用戶控件是矯枉過正構建的應用程序並且會不必要地臃腫應用程序,我已經構建了使用User Control的應用程序不夠精確,並且在後端積極努力[我們動態地實例化控件,因此我們使用Custom和Composite Server Controls而不是用戶控件(所有的代碼,而不是代碼+設計器)]並且我已經構建了用戶控件是完美解決方案的應用程序

但所有這些決定都是由於設計而做出的。

+0

你能總結一下,並簡單地告訴我它是否會降低性能嗎? - 是或否如果是,究竟是什麼原因造成的,如果沒有,原因是什麼。 – 2010-08-11 02:04:14

+0

這不是一個簡單的是/否問題。簡短的回答是「不在自己」,這正是斯蒂芬和我在我們的答案中所說的。程序員可以用它們做愚蠢的事情來使它們效率低下。另外,在我的回答中,你會看到他們如何提高性能。他的回答幾乎總結如下。 – David 2010-08-11 02:30:32

+0

用正常的話說我能相信你也不確定嗎? 如果你說它不簡單是/否你能否描述一些重要的觀點,你覺得是的,你覺得沒有? – 2010-08-11 03:36:17