伺服器控件雖功能強大,但每個實例都消耗伺服器記憶體與 CPU。本文提出四大優化原則:減少不必要控件、停用 ViewState、善用 IsPostBack、合理選擇資料繫結控件。
<%= %> 輸出,勿用 <asp:Label><asp:Label ID="lblStatic" runat="server" EnableViewState="false" />
<asp:Button ID="btnSubmit" runat="server" EnableViewState="false" />
void Page_Load(Object o, EventArgs e)
{
if (!Page.IsPostBack)
{
// 僅首次載入執行:資料庫查詢、繫結、初始化
SqlConnection conn = new SqlConnection(connStr);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Student", conn);
DataSet ds = new DataSet();
da.Fill(ds, "stu");
myDataGrid.DataSource = ds;
myDataGrid.DataBind();
}
}
防止每次 PostBack 重複查詢資料庫、重新繫結,大幅降低資料庫負載與頁面回應時間。
| 控件 | 功能豐富度 | 自訂彈性 | 效能開銷 | 建議場景 |
|---|---|---|---|---|
| GridView | 最高(分頁、排序、編輯、選取) | 低(表格結構固定) | 最高(ViewState 大) | 複雜表格、需內建功能 |
| DataList | 中(重複方向、模板) | 高(自由 HTML 結構) | 中 | 卡片式、多欄佈局 |
| Repeater | 最低(純模板迴圈) | 最高(完全控制輸出) | 最低(無 ViewState) | 簡單列表、SEO 敏感頁面 |
原則:功能夠用即可,勿過度使用重型控件。單純顯示清單首選 Repeater,需多欄/橫向重複用 DataList,需內建編輯/分頁才用 GridView。