1、數(shù)據(jù)庫訪問性能優(yōu)化
A、盡量減少數(shù)據(jù)庫連接,并充分利用每次數(shù)據(jù)庫連接:連接的創(chuàng)建、打開和關(guān)閉是有開銷的??梢允褂眠B接池
B、合理使用存儲(chǔ)過程:存儲(chǔ)過程是存儲(chǔ)在服務(wù)器端的一組預(yù)編譯的SQL。使用存儲(chǔ)過程可以避免對(duì)SQL的多次編譯,后續(xù)查詢可以復(fù)用之前的執(zhí)行計(jì)劃。另外存儲(chǔ)過程可以減少SQL語句網(wǎng)絡(luò)傳輸開銷
C、優(yōu)化SQL語句:這個(gè)就太多了,如合理使用索引、視圖,避免復(fù)雜子查詢
2、字符串操作性能優(yōu)化
A、使用值類型的ToString()方法
對(duì)不同類型進(jìn)行 + 連接時(shí),會(huì)發(fā)生裝箱操作轉(zhuǎn)化為引用類型再添加到字符串中。裝箱操作會(huì)在托管堆中分配一個(gè)新對(duì)象,將原有的值復(fù)制到新對(duì)象中,代價(jià)很高。使用ToString()方法可以避免裝箱,從而提高性能
B、利用StringBuilder類
3、禁用調(diào)試模式
4、只要合適,盡量緩存數(shù)據(jù)和頁面輸出
5、不要依賴代碼中的異常來控制程序正常流程
異常的開銷是很大的。所以慎用異常。
6、使用Page.IsPostBack避免往返過程的不必要處理
void Page_Load(Object sender, EventArgs e) // Set up a connection and command
{
if (!Page.IsPostBack) // 第一次加載時(shí)才填充數(shù)據(jù)
{
String query = "select * from Authors where FirstName like '%JUSTIN%'";
myCommand.Fill(ds, "Authors");
myDataGrid.DataBind();
}
}
7、如果不使用會(huì)話狀態(tài),可以禁用它或者設(shè)置只讀
A、若要禁用頁的會(huì)話狀態(tài),請(qǐng)將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為false。例如:
<%@ Page EnableSessionState="false" %>
B、注意如果頁需要訪問會(huì)話變量,但不打算創(chuàng)建或修改它們,則將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為 ReadOnly。
8、利用成熟的工具進(jìn)行性能測(cè)試