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

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

     編輯:關於C語言

互操作的三大開銷

  1. 資料封送:托管堆與非托管堆間複製資料。應使用「大塊」API 而非「細碎」API,減少跨邊界次數。若無法控制非托管介面,可建立輕量 C++ 包裝層暴露大塊 API。
  2. 大量資料吞吐時的邊界穿越開銷:thunking、安全性檢查等。
  3. 開發工作量:混合環境撰寫大量樣板程式碼,最糟糕的開銷,設計應最小化之。

「直接丟棄」策略優先

第 5 章展示 .NET 框架已提供大量功能,許多舊程式碼可由框架類別取代或以 C# 重寫。這是經過深思熟慮的遷移策略,雖非萬能但應優先評估。

Blittable 型別與結構佈局

Blittable 型別:托管與非托管記憶體配置相同,可直接位元複製。清單:Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、UIntPtr、其單維陣列、[StructLayout(LayoutKind.Sequential)] 明確佈局結構。範例:


[StructLayout(LayoutKind.Sequential)]
public struct Point3D { public int X, Y, Z; }

限制跨邊界傳遞的資料型別為 blittable,可大幅降低封送成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved