2011-05-14 103 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

由于您的代码并不那么简单,我会告诉它取决于您将代码转换为非托管代码的类型。如果代码与复杂的数字操作有关,也许非托管版本会比托管版本更快,但我认为您应该回顾一下您的算法,而不是编译器如何编译或优化代码。