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

Effective C# 原則 46:最小化與非托管代碼互操作 (中)

     編輯:關於C語言

資料封送最佳化

  • 優先使用 blittable 型別(Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、UIntPtr、其陣列、明確佈局結構),托管/非托管記憶體配置相同,直接複製零開銷。
  • 非 blittable 型別:套用 [In]/[Out] 屬性控制封送方向(In/Out 雙向、In 單向、Out 單向),避免不必要複製。
  • 字串預設封送為 BSTR(低效),可用 [MarshalAs(UnmanagedType.LPWStr)] 指定寬字元指標。

三種控制流程轉移策略

  1. COM Interop:最簡單使用現有 COM 元件,但效能最差。無現有 COM 元件時勿學習。執行期承擔 COM 子系統開銷,生命週期管理複雜(CLR 釋放 vs 手動 ReleaseComObject),建議讓 CLR 管理並接受效能損失。
  2. P/Invoke:直接呼叫 Win32 API,避免 COM 層開銷。缺點:需手寫每個方法簽章,非物件導向。C++ DLL 需指定修飾名(如 ?AfxMessageBox@@YGHIII@Z),極易出錯。
  3. Managed C++ (/clr):見下篇。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved