2011-05-14 46 views
0

這是一個簡單的示例。從託管代碼性能調用本機代碼

CodeDLL.cpp文件:

extern "C" { 
    __declspec(dllexport) int __cdecl SimulateGameDLL (int a, int b) { 
       return a*b; // Calculation in native code 
     } 
} 

GameSharp.cs文件:

static class GameSharp 
{ 
    public static class UnsafeNativeMethods 
    { 
     const string _dllLocation = "CoreDLL.dll"; 

     [DllImport(_dllLocation)] 
     public static extern int SimulateGameDLL(int a, int b); 
    } 
} 

static class GameSharp 
{ 
    public static class GameSharpClass 
    {  
     public static int SimulateGameDLL(int a, int b) { 
      return a*b; //Calculation in managed code 
     } 
    } 
} 

第一招:我有一個用C語言編寫一個dll文件++本機代碼,我嘗試在託管代碼中調用函數。(wrapper)

在第二個我已經將其轉換爲託管代碼。 我的代碼並不像這樣簡單。哪一個更好將我的C++本地代碼轉換爲託管或將其稱爲託管代碼。 哪一個更快?爲什麼?

如果這不明確,請告訴我,我會更多地討論它。不要在告訴我之前投票結束。 :)謝謝

+0

我想你忘了提到這個問題 – Constantinius 2011-05-14 15:32:09

+2

創建一個控制檯應用程序,將代碼包裝在一個秒錶中,在很多迭代中執行它並重復整個事情兩次。你得到了什麼? – 2011-05-14 15:32:42

+0

這是他的帖子的底部......「爲什麼?哪一個更快?」 – gshauger 2011-05-14 15:32:50

回答

2

我相信,當涉及到在.NET性能,託管和非託管代碼之間沒有明顯的區別。

我會將您的非託管代碼轉換爲託管,如果它全部運行在.NET上。

我只是覺得你不應該擔心這個級別的性能瓶頸。如果你在做遊戲開發,在網絡和圖形方面(使用着色器),你應該擔心性能。

編輯:

http://msdn.microsoft.com/en-us/library/bb677124.aspx

「執行的最大速度的管理層增加了大約10%的開銷到程序」。 (適用於Windows Mobile)

3

由於您的代碼並不那麼簡單,我會告訴它取決於您將代碼轉換爲非託管代碼的類型。如果代碼與複雜的數字操作有關,也許非託管版本會比託管版本更快,但我認爲您應該回顧一下您的算法,而不是編譯器如何編譯或優化代碼。

相關問題