首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 應用性能優化指南(一):總覽與 ADO.NET 數據訪問核心清單

     編輯:關於.NET

本系列旨在提供結構化的 .NET 應用性能優化知識體系。首篇確立整體框架,並深度解析 ADO.NET 數據訪問層的設計原則、驅動選擇、連接管理、命令優化、存儲過程、DataReader/DataSet 操作、XML 整合、異常與事務處理等核心檢查點。

系列檢查清單架構

  • 設計類:架構設計審查 (部署、通訊、併發、緩存、狀態、數據結構、異常、類設計)。
  • 技術類:ADO.NET、ASP.NET、Enterprise Services、Interop、Managed Code、Remoting、SQL Server、Web Services、XML。
  • 基礎設施類:SQL Server 專項 (擴容、Schema、查詢、索引、事務、執行計劃、XML、調優、測試、監控、部署)。

ADO.NET 設計原則

  • 基於數據使用模式設計 DAL (讀多寫少/寫多讀少/實時性要求)。
  • 積極緩存 (參考數據、靜態配置) 避免重複查詢。
  • 使用服務帳號連接 (最小權限),拒絕 sa。
  • 連接「晚開、早關、顯式關閉」,利用連接池。
  • 減少往返:批量 SQL、預存過程、ExecuteNonQuery/ExecuteScalar 精準選用。
  • 只選所需列 (SELECT col1, col2),大結果集分頁。
  • 優先 Windows 認證 (安全) / SQL 認證 (性能) 按場景權衡。
  • 選擇適當事務隔離級別 (預設 Read Committed)。
  • 存儲過程封裝邏輯 (防注入、計劃複用、權限控制),但權衡維護成本。
  • 跨層傳輸格式權衡性能、可維護性、生產力 (DTO/匿名類/動態對象)。

驅動選擇對照表

目標數據庫推薦命名空間/提供者
SQL Server 7.0+System.Data.SqlClient (原生托管,最高性能)
SQL Server 6.5 / OLE DBSystem.Data.OleDb
ODBC 數據源System.Data.Odbc
OracleSystem.Data.OracleClient / ODP.NET
SQL Server 2000 + XMLSystem.Data.SqlXml

連接管理鐵律

  • 在方法內 Open/Close,用完即關 (自動回池)。
  • 顯式 Close()/Dispose(),不依賴 GC。
  • DataReader 指定 CommandBehavior.CloseConnection 自動關聯關閉。
  • 單次 Fill/Update 無需顯式 Open (DataAdapter 內部管理)。
  • 避免檢查 OleDbConnection.State (性能差),直接 try/catch。
  • 啟用連接池 (預設開啟),配置 Min/Max Pool Size。

命令與參數優化

  • 參數化查詢 (Parameters 集合) 防注入、促進計劃複用。
  • 大結果集支援分頁 (SQL 2005+ ROW_NUMBER() / 2012+ OFFSET/FETCH)。
  • 批量 SQL 減少網絡往返。
  • CommandBehavior.SequentialAccess 處理寬行/BLOB 流式讀取。
  • 運行時禁用 CommandBuilder (元數據查詢開銷大),設計時生成命令。
  • 存儲過程:SqlCommand 配 CommandType.StoredProcedure,OleDbCommand 配 CommandType.Text (ODBC/OLEDB 限制)。
  • 輸出參數替代單值結果集;SET NOCOUNT ON 減少網絡封包。
  • 顯式創建參數、指定類型、緩存 SqlParameter 對象 (線程安全需注意)。

DataReader / DataSet / XML 進階

  • DataReader:唯讀前向流,用畢即關;索引查找用 GetOrdinal 避免字符串查找;BLOB 用 SequentialAccess + GetBytes。
  • DataSet:減少序列化 (Remoting/Web Service 傳輸);主鍵 + Rows.Find O(1) 查找;非主鍵重複查詢用 DataView 索引;採用樂觀並發 (時間戳/版本號)。
  • XML:運行時勿推斷 Schema;大批量導入用 OpenXML / SqlBulkCopy (2008+);避免高併發 OpenXML 耗盡緩存。

異常、事務與 BLOB 處理

  • try/finally 保證資源釋放;精準捕獲特定異常 (SqlException, SocketException)。
  • 單一數據源:SQL 事務 (服務端) / ADO.NET 事務 (客戶端控制)。
  • 跨資源管理器:DTC 分佈式事務。
  • 事務極短、合適隔離級、固定訪問順序防死鎖。
  • 連接字串 Enlist=false 退出自動登記 DTC (性能優化)。
  • BLOB:SequentialAccess + GetBytes/READTEXT/UpdateText (SQL Server);OracleLob.Read/Write (Oracle);避免重複搬移大對象。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved