簡體   English   中英

從托管C#應用程序調用非托管代碼的缺點

[英]Disadvantages of calling unmanaged code from a managed C# app

從C#應用程序調用本機庫中的函數有什么缺點? 我期望性能受到什么影響? 這些功能是基本的工程計算,沒有什么復雜的。 我們有一天可以用C#重寫它們。

P / Invoke每個調用的開銷約為10-30 x86指令。 這有多重要取決於您越過邊界的頻率以及在另一側花費的時間。 例如,如果您的計算要花費10微秒才能運行,那么與計算成本相比,額外的10-30條指令將是微不足道的。 如果您的計算量很小並且被調用很多,那么開銷可能足夠大,足以證明現在就可以移植它,或者創建一個執行重復調用的非托管包裝函數(以使您越過邊界的次數降到最低)。

主要缺點不是性能,而是信任要求。 例如,如果您調用本機代碼,則無法從網絡驅動器或Intranet站點運行(至少在沒有其他配置的情況下),因為默認情況下,這些源的信任度低於本地計算機。

值得注意的另一點是,非托管代碼將在流程中的所有AppDomain之間共享。 如果您具有一個帶有多個AppDomain的進程(例如ASP.NET輔助進程),則相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM