911亚洲精品视频-亚洲日本在线看片-摸胸软件-三级**毛片|www.szkangyu.net

E-Mail:115294781@qq.com 聯系電話: 020-84226565

.net的性能優化

2013-10-24

前段時間,由于學習網的訪問速度比較慢,所以研究了下如何優化 asp.net 的程序,在網上查了很多資料,最后總結了以下經驗:

 

一、 SqlDataRead Dataset 的選擇

Sqldataread 優點:讀取數據非常快。如果對返回的數據不需做大量處理的情況下,建議使用 SqlDataReader ,其性能要比 datset 好很多。缺點:直到數據讀完才可 close 掉于數據庫的連接 (SqlDataReader 讀數據是快速向前的。 SqlDataReader 類提供了一種讀取從 SQL Server 數據庫檢索的只進數據流的方法。它使用 SQL Server 的本機網絡數據傳輸格式從數據庫連接直接讀取數據。 DataReader 需及時顯式的 close 。可及時的釋放對數據的連接。 )

Dataset 是把數據讀出,緩存在內存中。缺點:對內存的占用較高。如果對返回的數據需做大量的處理用 Dataset 比較好些可以減少對數據庫的連接操作。優點:只需連接一次就可 close 于數據庫的連接

一般情況下,讀取大量數據 , 對返回數據不做大量處理用 SqlDataReader. 對返回數據大量處理用 datset 比較合適 . SqlDataReader Dataset 的選擇取決于程序功能的實現。

 

二、 ExecuteNonQuery ExecuteScalar

對數據的更新不需要返回結果集,建議使用 ExecuteNonQuery 。由于不返回結果集可省掉網絡數據傳輸。它僅僅返回受影響的行數。如果只需更新數據用 ExecuteNonQuery 性能的開銷比較小。

ExecuteScalar 它只返回結果集中第一行的第一列。使用 ExecuteScalar 方法從數據庫中檢索單個值(例如 id 號)。與使用 ExecuteReader 方法, 返回的數據執行生成單個值所需的操作相比,此操作需要的代碼較少。

只需更新數據用 ExecuteNonQuery 單個值的查詢使用 ExecuteScalar

 

三、數據的綁定 DataBinder

一般的綁定方法 <%# DataBinder.Eval(Container.DataItem, " 字段名 ") %>

DataBinder.eval 綁定不必關心數據來源 (Dataread dataset) 。不必關心數據的類型 eval 會把這個數據對象轉換為一個字符串。在底層綁定做了很多工作,使用了反射性能。正因為使用方便了,但卻影響了數據性能。

對數據的綁定建議使用 <%# ctype(Container.DataItem,DataRowView).Row[" 字段名 "] %> 。數據量大的時候可提高幾倍的速度。使用時注意兩方面:

1. 需在頁面添加 <%@ Import namespace="System.Data"%>.

2. 注意字段名的大小寫(要特別注意)。如果和查詢的不一致,在某些情況下會導致比 <%# DataBinder.Eval(Container.DataItem, " 字段名 ") %> 還要慢。如果想進一步提高速度,可采用 <%# ctype(Container.DataItem,DataRowView).Row(0) %> 的方法。不過其可讀性不高。

 

四、使用存儲過程

性能方面:存儲過程提供了許多標準 sql 語言中所沒有的高級特性。其傳遞參數和執行邏輯表達式的功能,有助于應用程序設計者處理復雜任務。另外,存儲過程存儲在本地服務器上,減少了執行該過程所需的網絡傳輸寬帶和執行時間。(存儲過程已經對 sql 語句進行了預編譯,所以其執行速度比在程序里執行 sql 語句快很多)

程序結構方面:從程序的可擴展性看,使用存儲過程會對程序以后的修改帶來方便。比如數據庫的結構改變了,只需修改相對應的存儲結構,和程序中的調用部分即可。

 

五、大量查詢時使用分頁查詢

如果我們有大量的數據要查詢,但是顯示的時候是一頁一頁的顯示,這是我們可以用分頁查詢的功能,就是需要多少數據就查詢多少數據,這樣至少可以從兩個方面優化速度:

1.        傳輸的數據少,可以減少帶寬的壓力。

2.        由于查詢的數據少,可以減少數據庫的查時間。

 

    六、 EnableViewState( 頁面的視圖狀態 ) 。如果無特殊要求設置為 false

他主要是用于維護頁面的 UI 狀態, Web 是沒有狀態的, ASP.NET 頁面也沒有狀態,它們在到服務器的每個往返過程中被實例化、執行、呈現和處理,因此他的存在是要消耗服務器的性能的,當然他的存在也可以減少我能很多的代碼,因為很多控件的狀態他幫我們維護了,在不需要維護狀態的情況下完全可以禁用 viewstate

如下所示:

單個頁面: <%@ Page EnableViewState="False" %>

所有的頁面:在 web.config <Pages EnableViewState="false" />

 

七、 Html 控件和服務器控件的選擇

服務器控件帶來的方便和功能上的實現是 html 控件所不能比擬的。但是是以犧牲服務器端的資源來取得的。我個人建議:如果 html 控件達不到所要實現的功能,而且和一些腳本語言(如 javascrpt/vbscript )結合也不能實現的話,才會選擇服務器控件。

主要針對幾個常用數據控件說明一下:

DataGrid :自帶最強大的數據顯示控件,內置了對數據的修改、刪除、添加、分頁等很多實用功能。如果你只需對數據顯示的話,盡量不要選擇 DataGrid (它把數據都存儲在 viewstate 中) 也不要使用自帶的分頁功能, microsoft 在自動分頁的底層做了很多工作,雖然使用方便了,但性能開銷大了。

DataList :比 DataGrid 功能少了很多。但自定義性強了很多。特有的多行數據顯示,給我們帶來了很多方便。 DataGrid 能實現的功能,它基本能實現,所以建議使用它。

Repeater :功能最少,但自定義性非常強。如果只需對數據顯示,建議使用。由于減少了很多功能,對服務器的性能帶來消耗最小。因此,如果是對數據顯示的話,我基本上都是選擇   Repeater 然后 DataList 最后 DataGrid 盡量選擇 html 控件,能在客戶端實現的功能就在客戶端實現 ( 熟練掌握 javascript) ,減少服務器的壓力。數據控件選擇順序: Repeater DataList DataGrid

 

八、 String StringBuilder 的比較

String 類對象是不可改變的,對于 String 對象的重新賦值在本質上是重新創建了一個 String 對象并將新值賦予該對象,其方法 ToString 對性能的提高并非很顯著。

在處理字符串時,最好使用 StringBuilder 類,其 .NET 命名空間是 System.Text 。該類并非創建新的對象,而是通過 Append Remove Insert 等方法直接對字符串進行操作,通過 ToString 方法返回操作結果。

 

以上幾點只是個人總結和從網上摘抄的,其實 asp.net 的優化遠不止這些,如果要做好他需要對 .net 的運行機制和對象的使用非常熟悉。當然還有一點是非常重要的,就是程序的性能,本來是幾句代碼可以完成的結果寫了一大段,結果是影響了整個頁面的性能,這方面的優化得靠自己的基本功和經驗來提高了。

廣州網站建設