簡體   English   中英

從托管代碼調用非托管代碼的性能

[英]Performance of invoking unmanaged code from managed code

我有一個win32 dll和兩個使用相同dll的應用程序。 一個是用c在非托管空間中編寫的,另一個是.net應用程序,它使用Pinvokes調用非托管代碼。

有時.net應用程序的性能優於c應用程序。 從技術上講,從.net調用非托管代碼會導致性能開銷,但在這種情況下不會。

我檢查了msdn參考,似乎在進行實際調用之前發生了某種預處理。 鏈接期間將加載dll。

我想了解.net應用程序在哪些情況下表現出色?

Pinvoke編組器是.NET框架中最重的優化代碼塊之一。 非常重要,在非托管操作系統上運行托管程序時,您看不到很多功能。 開銷量是高度可變的。 當DLL已經加載並且pinvoked函數的參數是簡單的整數類型時,這只是少數cpu周期。 當需要字符串轉換時,需要數百個周期。

在任何情況下,它都不會比本地調用快。 准確地測量僅幾個周期的開銷是困難的。 請記住,您可能無意中測量了測試程序的性能,而不是pinvoke調用。

暫無
暫無

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

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