實現性能目標的幾種方法
一. 調整程序代碼
1.避免多次讀取相同數據
在循環語句中不要包含無端重復執行的代碼,如:
while ( dr.read())
{
if(dr.item["lastname"]==Request.params[“lastname“])
return true;
else
return false;
}
在上面循環中,對于DataReader返回的每條記錄都要對Request.params[“lastname“]進行一次求值,假如dr返回100條記錄,我們就對Request.params[“lastname“]求值了100次 ,而這100次有99次都是多余的,下面的代碼相對效率就高些
string strlastname=Request.params[“lastname“];
while ( dr.read())
{
if(dr.item["lastname"]==strlastname)
return true;
else
return false;
}
總結:從任何類型的集合中讀取值都比較慢,我們需要多次訪問它時,可以先在局部變量中保存一個副本
2.對連接字符串使用Response.Write();
連接字符串是一個很費資源的操作,我們要把一個10字節的字符與一個30字節的字符連接起來,代碼必須分配一個40字節的內存區域,復制所有字節到這塊區域,然后在調整指針位置指到這塊區域,在釋放原來資源而Response.Write()方法提供了高效的緩沖和連接服務,所以一般情況下以下代碼
Response.Write(“HeadLine=“);
Response.Write(“strHeadLine“);
Response.Write(“,Descreption=“);
Response.Write(dr.item[“Descreption“]);
比下列代碼
Response.Write(“HeadLine=“)&_
StrHeadLine&_
“,Descreption=“&_
dr.item[“Descreption“];
效率要高
總結:盡量用Response.Write()和StringBuilder來連接字符串
3.避免頻繁調用COM組件轉為托管代碼.
4.避免改變數組維數
在程序中動態改變數組維數其實是用請求大小創建一個新的數組,拷貝原來數組中內容到里面,然后刪除原來數組,并用新數組代替舊數組地址,這就耗費了很大力氣
5.不要過分依賴于代碼中的異常檢查
異常處理是很消耗資源的操作,對于普通代碼能檢測到情況,就應盡少使用異常處理
如try
{
int a,b;
a=100/b;
}
catch
{
b=0;
}
就不如用以下代碼效率高
if(b==0)
{
error();
}
效率高
總結:應盡少量的使用異常處理機制
6。應該實現盡早綁定防止后期綁定,做法為在WEB頁的@Page指令中加入O ption=“Strict”這一選項可以防止在數據轉換時都是數據
二。調整ASP.NET的使用
1.禁用調試和跟蹤模式
在部署產品級應用程序時,用這兩個模式會顯著降低性能
2.預先在Application 對象中載入數據
把一些頻繁使用的又相對靜止的數據通過一次性讀取數據載入Application 中可以提高程序的性能 Application對象一旦建立九一直保存在內存中,直至程序結束,對于WEBl來說就是服務器關閉,但把
幾Mbyte的數據存在Application中不是什么好的選擇了
3.用Page.IsPostBack來避免不必要的處理
在實際表單提交時沒有必要運行初始化代碼,ViewState機制會保存我們任何表單的初始化元素
4. 適當使用服務器控件
在控件標記中加runat=server會增加web服務器的負擔.除非有必要處理控件的屬性,在服務器處理控件的事件時候就不要為標記加此屬性
5.在必要的時候使用ViewState
viewstate包含的控件越多,服務器負擔就愈大,利用viewstate還可能惹出麻煩,例如一個顯示錯誤信息的label控件,我們希望不要在每一個頁面上都重復該消息要清除某一控件的VIewstate 屬性可以將其EnableViewSate屬性設置為false.
6.在沒有使用會話的頁面中禁止用Session
7.盡可能的緩存數據和頁面輸出
Cache可以大幅度提高性能,我們可以在頁面中編寫OutputCache指令
8.避免對服務器進行不必的數據往返傳輸
可以利用驗證控件來減少不必要的往返數據傳輸
后面的比較倉促,老婆催著睡覺,再不睡估計要.....,呵呵.
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號