錯誤:string sql = "select * from " + table + " where name='" + name + "'"; 產生多個中繼字串物件,增加 GC 壓力。
正確:使用 string.Format 或 StringBuilder。
string sql = string.Format("select * from {0} where name='{1}'", table, name);
// 或大量拼接時
var sb = new StringBuilder();
sb.Append("select * from ").Append(table).Append(" where name='").Append(name).Append("'");
錯誤:用 try { Convert.ToInt32(s); } catch { return false; } 判斷數值,例外處理開銷大。
正確:int.TryParse(s, out int val) 更快、更簡潔、無例外。
錯誤:在 finally 中 Close() + Dispose(),若 catch 區塊耗時 (如寫入錯誤日誌),連線釋放被延遲。
正確:使用 using 區塊,離開範圍自動呼叫 Dispose(),確保資源最早釋放。
using (var conn = new SqlConnection(connStr))
{
conn.Open();
// 執行命令
}
注意:實作 IDisposable 類別時,若無非受控資源,建議交給 GC 最終化釋放,避免干擾分代回收優化。
錯誤:public string AccountNumber; 允許外部任意修改。
正確:使用唯讀屬性保護內部欄位。
private string _accountNumber;
public string AccountNumber { get { return _accountNumber; } }
錯誤:每層方法都 try-catch 同一例外並重新拋出,效能損耗累積。
正確:僅在頂層或需具體處理處捕獲,中間層不攔截或使用 throw; 保留堆疊追蹤。
錯誤:單表百萬筆資料載入 DataSet 佔用大量記憶體。
正確:使用 DataReader 逐列串流讀取,記憶體佔用恆定。視情境選擇:DataSet 適合離線、關聯、小資料量;DataReader 適合大量、唯讀、串流。