本系列旨在提供結構化的 .NET 應用性能優化知識體系。首篇確立整體框架,並深度解析 ADO.NET 數據訪問層的設計原則、驅動選擇、連接管理、命令優化、存儲過程、DataReader/DataSet 操作、XML 整合、異常與事務處理等核心檢查點。
sa。ExecuteNonQuery/ExecuteScalar 精準選用。SELECT col1, col2),大結果集分頁。| 目標數據庫 | 推薦命名空間/提供者 |
|---|---|
| SQL Server 7.0+ | System.Data.SqlClient (原生托管,最高性能) |
| SQL Server 6.5 / OLE DB | System.Data.OleDb |
| ODBC 數據源 | System.Data.Odbc |
| Oracle | System.Data.OracleClient / ODP.NET |
| SQL Server 2000 + XML | System.Data.SqlXml |
Open/Close,用完即關 (自動回池)。Close()/Dispose(),不依賴 GC。DataReader 指定 CommandBehavior.CloseConnection 自動關聯關閉。Fill/Update 無需顯式 Open (DataAdapter 內部管理)。OleDbConnection.State (性能差),直接 try/catch。Min/Max Pool Size。Parameters 集合) 防注入、促進計劃複用。ROW_NUMBER() / 2012+ OFFSET/FETCH)。CommandBehavior.SequentialAccess 處理寬行/BLOB 流式讀取。CommandBuilder (元數據查詢開銷大),設計時生成命令。SqlCommand 配 CommandType.StoredProcedure,OleDbCommand 配 CommandType.Text (ODBC/OLEDB 限制)。SET NOCOUNT ON 減少網絡封包。SqlParameter 對象 (線程安全需注意)。DataReader:唯讀前向流,用畢即關;索引查找用 GetOrdinal 避免字符串查找;BLOB 用 SequentialAccess + GetBytes。DataSet:減少序列化 (Remoting/Web Service 傳輸);主鍵 + Rows.Find O(1) 查找;非主鍵重複查詢用 DataView 索引;採用樂觀並發 (時間戳/版本號)。OpenXML / SqlBulkCopy (2008+);避免高併發 OpenXML 耗盡緩存。try/finally 保證資源釋放;精準捕獲特定異常 (SqlException, SocketException)。Enlist=false 退出自動登記 DTC (性能優化)。SequentialAccess + GetBytes/READTEXT/UpdateText (SQL Server);OracleLob.Read/Write (Oracle);避免重複搬移大對象。