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

.NET 應用性能優化指南(三):Remoting 遠程調用性能調優精要

     編輯:關於.NET

本文為系列第三篇,系統梳理 .NET Remoting 在設計選型、激活模式、通道格式化、封送策略、序列化優化等維度的性能調優實踐。

架構選型決策樹

  • 同進程跨 AppDomain:首選 Remoting,輕量高效。
  • 宿主選擇:IIS (自帶驗證、支援 NLB 負載均衡) vs Windows Service/Console (需自建安全、高性能)。
  • 激活模式:
    • SingleCall SAO:無狀態、每請求一實例、最佳擴展性、支援負載均衡。
    • Singleton SAO:共享狀態、控制生命週期 (重寫 InitializeLifetimeService)、訪問同步資源。
    • CAO:僅當客戶端需精確控制實例生命週期時使用。
  • 通道與格式化器:
    • TcpChannel + BinaryFormatter:內網高性能首選,二進制序列化最緊湊快速。
    • HttpChannel + SoapFormatter:跨防火牆、異構互操作,性能較差,建議改用 Web Service/WCF。
    • IIS 宿主時關閉 HTTP Keep-Alive (Remoting 短連接特性不適合長連接)。

封送策略:MBR vs MBV 選型矩陣

場景推薦策略理由
對象狀態綁定服務端資源 (DB連接、文件句柄、網絡連接)MBR (MarshalByRefObject)狀態不可序列化/跨機無效,代理轉發調用
頻繁更新服務端數據MBR避免大對象反序列化開銷,僅傳遞調用
對象體積極大MBR按需拉取數據,而非整體傳輸
對象輕量、狀態需傳遞至客戶端、服務端少更新MBV (Serializable)本地調用無邊界開銷,適合只讀數據傳遞
頻繁更新但對象可拆分為多個小對象小顆粒 MBV權衡序列化 vs 遠程調用開銷,針對非 blittable 類型尤有效

序列化與封送優化技巧

  • 資料外觀模式:僅暴露客戶端關心的屬性子集,避免整個對象圖序列化。
  • 優先基元類型/結構體:跨邊界調用昂貴,能本地計算不遠程調用;基元類型序列化無反射開銷。
  • [NonSerialized] 屏蔽無關字段:減少傳輸體積。
  • 鎖定 BinaryFormatter:拒絕 SoapFormatter 的 XML 開銷。

異步通訊與介面設計

  • IO 密集型操作 (Remoting、Socket、DB) 必須異步調用,釋放線程池線程。
  • 介面設計避免「對話式」細粒度調用,合併為粗粒度批量操作,最小化網絡往返。
  • 避免在內存中持久化會話狀態,採用無狀態設計支撐水平擴展。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved