總的考慮方向
) 根據數據使用的方式來設計數據訪問層
) 緩存數據避免不必要的操作
) 使用服務帳戶進行連接
) 必要時連接盡早釋放
) 關閉可關閉的資源
) 減少往返
) 僅返回需要的數據
) 選擇適當的事務類型
) 使用存儲過程
根據性能維護性及實現難度來決定跨層數據傳遞的方式
具體實現
)選用合適的Data Provider
應盡量使用專用的Data Provider下面是一個性能比較表
可以看出SqlClient的速度是最快的其主要原因是其他的數據提供者都經過的幾個層次的轉換
可以看出SqlClient直接訪問DB Netlib而其他的數據提供者都經過了兩層轉換因此在設計多層應用的時候並不是層次越多越好而是應該在可擴展性與性能間取折中增加層次是會降低性能的
) 數據庫連接
i 在方法中打開和關閉連接即不要在類的構造函數中打開連接在類的析構函數中關閉連接
ii 使用完連接明確地關閉因為有連接池的支持關閉連接只是將連接放回連接池並不是真正銷毀不會帶來性能開銷而會增加連接池中可用連接提升性能
iii 當使用DataReaders時指定CommandBehaviorCloseConnection
iv 當使用Fill()與Updata()時不要手動打開連接因為DataAdapter會自動開啟連接但是如果是Command則需要手動開啟
v 避免檢查OleDbConnection的State屬性其性能開銷相當大
vi 使用連接池這種方法可以大幅度提高性能默認的情況下通過SqlClient連接數據庫時會使用連接池另可以通過連接字符串來控制連接池的最大值最小值以及是否開啟連接池
) SQL指令
i 檢查SQL的輸入並使用參數直接使用字符連接容易遭受注入式攻擊
ii 僅返回需要的行和例
iii 對大的數據集使用分頁功能
[] []
From:http://tw.wingwit.com/Article/program/net/201311/15084.html