- 解構函式勿關閉資料連線:GC 呼叫時機不確定,請用
using 或 try/finally 顯式釋放。
- 慎用複雜列表控制項:
GridView、DataGrid ViewState 巨大,依需求自訂繼承 IDataBoundControl 的輕量控制項。
- 雙重檢查鎖定單例模式:
public sealed class Singleton {
private static volatile Singleton _instance;
private static readonly object _sync = new object();
private Singleton() { }
public static Singleton Instance {
get {
if (_instance == null) {
lock (_sync) {
if (_instance == null) _instance = new Singleton();
}
}
return _instance;
}
}
}
- 同一 Connection 重複執行命令需注意:未關閉前一個
SqlDataReader 即重用 SqlCommand 會導致例外,請確保 reader.Close() 或使用 MARS (MultipleActiveResultSets=True)。
- 善用系統預存程序:
sp_help、sp_helptext、sp_depends 等快速查詢中繼資料。
- Identity 欄位重置:
DBCC CHECKIDENT ('MyTable', RESEED, 0); -- 下一筆從 1 開始
- NullReferenceException 常見成因:Session 遺失、未檢查
null 即存取成員、ViewState 遺失。防禦性編程:obj?.Prop、?? 運算子。
- ViewState 膨脹:無需回傳資料的控制項設
EnableViewState="false"。
- 例外處理層級:捕獲具體例外(
FileNotFoundException),避免吞噬 Exception;自訂例外繼承 ApplicationException 而非 Exception。
- 字串比較:
== 與 Equals 行為不同(參考 vs 值),字串建議用 string.Equals(a, b, StringComparison.OrdinalIgnoreCase)。
- Session 清理:
Session.Remove(key) 移除單一鍵,Session.Abandon() 棄用整個 Session。
- 養成 try/catch/finally 習慣:
finally 確保資源釋放。
- 分層架構:資料層、業務層、表現層分離,降低耦合。
- 變數初始化:宣告即賦值,避免
CS0165 未指派錯誤。
- 正則表達式效能:
Regex 編譯與匹配較慢,熱路徑改用 string.Contains、Span 解析或預編譯 RegexOptions.Compiled。
- DataFormatString 格式化:
DataFormatString="Detail.aspx?id={0}" 直接在繫結欄位格式化 URL。
- 預存程序參數長度:
varchar 長度不足導致截斷錯誤,檢查 DECLARE @p varchar(100) 是否足夠。
- 強制終止程序:
ntsd -c q -p <PID>(需 Debugging Tools for Windows)。
- 資料庫記錄檔壓縮:
BACKUP LOG [DB] WITH NO_LOG;
DBCC SHRINKDATABASE([DB]);
ALTER DATABASE [DB] SET AUTO_SHRINK ON;
- Double 驗證正則:
^([0-9]+)(\.[0-9]+)?([Ee][-+]?[0-9]+)?$
- XML 檔案快取:頻繁讀取的 XML 載入
MemoryCache 或 HttpRuntime.Cache,避免磁碟 I/O。
- Reader 必須 Close:
XmlReader、SqlDataReader 皆實作 IDisposable,請用 using。