2015-04-23 77 views
0

如何提高ASP.NET MVC Web應用程序的性能?如何提高ASP.NET MVC Web應用程序的性能?

哪些是我應該多加小心的領域?

在我的Web應用程序包含數據庫連接API圖像解析

+3

首先,您需要確定您站點中潛在的性能瓶頸,爲此,您需要執行一些性能測試。有很多工具可以做到這一點。一旦你確定了這些問題,那麼你可以修復它們。 – mattytommo

+0

你能否給我推薦任何**性能測試工具**。 我使用Google (https://developers.google.com/speed/pagespeed/insights/)工具, 這對於性能測試有好處嗎? –

+0

嗯,這裏有ANTs Profiler,我認爲這對分析.NET應用程序來說太棒了。使用30天的試用,看看它是否給你任何東西。從SQL的角度來看,只需使用SQL事件探查器來捕獲主要進程的跟蹤,然後就可以通過調整顧問來運行它,以查看它的建議。然後你可以使用類似WebLoadUI或類似的東西來自動化一些負載測試,它會告訴你什麼是首先在負載下崩潰。 – mattytommo

回答

3

查找瓶頸,記得優化,可以優化,但ISN,而不是某事物的共同使用的情況下還沒用過。如果你不知道Amdahl's law你應該看看它。設定您的目標,以更快的速度運行1000次,循環檢查循環和/或獲取更多數據。緩存也可以極大地提高性能。一個好的book關於這個被稱爲「創建更快的網站」和「更快的網站」,它告訴你很多如何優化網絡。

1

以下是一些提示您的ASP.Net應用程序性能的提示。

視圖狀態

視圖狀態是奇蹟的機制,顯示貼在服務器上的條目的詳細信息。每次ifrom服務器都會加載它。該選項看起來像是最終用戶的額外功能。這需要從服務器加載,並向頁面添加更多大小,但當頁面中有許多控件(如用戶註冊)時,會影響性能。所以,如果沒有必要,那麼它可以被禁用。

需要根據需求給出EnableViewState =「false」。它可以在控件,頁面和配置級別設置中給出。

避免會話和應用程序變量

Session對象存儲機制,有助於開發人員能夠利用整個頁面的值。它將根據所選的會話狀態進行存儲。默認情況下它將被存儲在Inproc中。該默認設置使用IIS。當這個Session變量用在被許多數字訪問的頁面中時,它將佔用更多的內存分配並給IIS帶來額外的開銷。它會使表演變慢。

在大多數情況下都可以避免。如果您想跨頁面發送信息,那麼我們可以使用交叉回傳,帶有加密的查詢字符串。如果你想在頁面中存儲信息,那麼緩存對象是最好的方法。

使用緩存

ASP.Net具有緩存機制的非常顯着的特徵。它提供更多性能並避免客戶端/服務器進程。 ASP.Net中有三種類型的緩存。

如果整個頁面中有任何靜態內容,那麼它應該與輸出緩存一起使用。它所做的是將內容存儲在IIS上。當請求頁面時,它將立即從IIS中加載一段時間。同樣可以使用片段分頁來存儲網頁的一部分。

有效利用CSS和腳本文件

如果您有用於整個網站中多個頁面,然後根據需求大CSS文件,它可以被分割並存儲不同的名稱。它將最小化頁面的加載時間。

圖片大小

過度使用網站中的圖片會影響網頁的效果。加載圖像需要時間,特別是在撥號連接時。除了使用背景圖片之外,還可以在CSS顏色上完成,或者在所有頁面中重複使用重量輕的圖片。

基於CSS佈局

整個網頁設計是通過使用div標籤,而不是表佈局的CSS控制。它顯着提高了頁面加載性能。這將有助於在整個網站實施相同的標準指南。它將輕鬆減少未來的變化。當我們使用嵌套表格佈局時,渲染需要更多時間。

避免往返

我們可以避免不必要的數據庫訪問加載在數據庫中的內容不變。我們應該使用IsPostBack方法來避免往返數據庫。使用JavaScript

手冊驗證

驗證可以在客戶端瀏覽器,而不是在服務器端做來完成。 JavaScript幫助我們在客戶端進行驗證。這將減少服務器的額外開銷。

插件軟件有助於禁用客戶端瀏覽器中的編碼。所以,敏感的應用程序應該在進入過程之前進行服務器端驗證。

清除垃圾收集

通常.Net應用程序使用垃圾收集從內存中清除未使用的資源。但是從內存中清除未使用的對象需要時間。

有很多方法可以清理未使用的資源。但並非所有的方法都是推薦的。但是我們可以在finally塊中使用dispose方法來清理資源。此外,我們需要關閉連接。它會立即釋放資源並在內存中提供空間。在客戶端

避免散裝數據存儲

儘量避免在客戶端更多的數據。它會影響網頁加載。當我們在隱藏的控件上存儲更多數據時,它將被加密並存儲在客戶端。它也可能被黑客篡改。

實現動態尋呼

當我們大量的記錄加載到像GridView控件,DataList控件和ListView服務器數據控件需要時間來加載。所以我們只能通過動態分頁顯示當前頁面數據。

使用存儲過程

嘗試使用存儲過程。他們會提高網頁的性能。因爲它作爲編譯對象存儲在數據庫中,並且它使用查詢執行計劃。如果您通過查詢,那麼它將進行網絡查詢。在存儲過程中,一行將被傳遞給後端。

使用XML和XSLT

XML和XSLT將加快頁面的表現。如果這個過程並不複雜,那麼它可以在XSLT中實現。

使用數據集

與DataReader相比,DataSet不是輕量級的。但它具有斷開架構的優點。一個DataSet將消耗大量的內存。即使它可以有一天以上。如果你想在加載頁面時執行很多操作,那麼使用DataSet可能會更好。一旦數據加載到DataSet中,它也可以在以後使用。

使用字符串構建到位串

的當我們追加像在服務器端,然後我們可以使用StringBuilder郵件格式的字符串。如果使用字符串進行連接,則它每次執行的操作是創建用於存儲該字符串的新存儲位置。它在內存中佔用更多空間。但是如果我們在C#中使用StringBuilder類,那麼它會消耗比String更多的內存空間。

使用Server.Transfer的

如果你想在當前服務器中傳輸的頁面,然後我們就可以使用Server.Transfer方法。它避免了瀏覽器和服務器之間的往返。但它不會更新瀏覽器歷史記錄。

使用線程

線程是程序設計的一個重要機制,有效地利用系統資源。當我們想要做一個後臺進程時,它可以被稱爲後臺進程。

考慮點擊發送時的示例,它應該將郵件發送給5萬個成員,但不需要等待所有進程完成。只需將郵件發送進程作爲後臺線程調用,然後繼續進行進一步處理,因爲郵件的發送不依賴於任何其他進程。

- >您也可以在Visual Studio中使用「ReSharper」以進行更好的調整。 (https://www.jetbrains.com/resharper/

+0

其中一些實際上是與WebForms相關的,這是MVC(視圖狀態,動態分頁等) – mattytommo