这是一个简单的示例。
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文件,我尝试在托管代码中调用其中的函数。
在第二个示例中,我将其转换为托管代码。我的代码不像this.Which那么简单,最好将我的c++本机代码转换为托管代码或将其称为表单托管代码。哪一个更快?为什么?
如果这一点不清楚,请告诉我我会更多地讨论它。在告诉我之前,不要投票关闭它。:)谢谢
发布于 2011-05-15 00:03:26
我相信当涉及到.NET的性能时,托管代码和非托管代码之间没有明显的区别。
如果您的非托管代码都运行在.NET上,我会将其转换为托管代码。
我只是认为你不应该担心这个级别的性能瓶颈。如果你在做游戏开发,你应该担心网络和图形的性能(使用着色器)。
编辑:
http://msdn.microsoft.com/en-us/library/bb677124.aspx
“最大执行速度。托管层给程序增加了大约10%的开销。”(适用于windows mobile)
发布于 2011-05-15 00:11:46
由于您的代码不是那么简单,我会告诉您这取决于您要转换为非托管代码的代码类型。如果代码必须与复杂的数字运算有关,那么非托管版本可能会比托管版本更快,但我认为您应该更多地检查您的算法,而不是编译器如何编译或优化代码。
https://stackoverflow.com/questions/6002813
复制相似问题