C# 从托管代码性能调用本机代码
这是一个简单的例子 CodeDLL.cpp文件:C# 从托管代码性能调用本机代码,c#,.net,performance,pinvoke,C#,.net,Performance,Pinvoke,这是一个简单的例子 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 UnsafeNat
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);
}
}
或
第一个:我有一个DLL文件,用C++本地代码编写,我试图在托管代码中调用它的函数。(包装器)
在第二个示例中,我将其转换为托管代码。 我的代码并不像这样简单,哪一个更好地转换我的C++本地代码来管理或调用它。 哪一个更快?为什么?如果这还不清楚,请告诉我,我将进一步讨论。在告诉我之前,不要投票决定结束。:)谢谢我相信当谈到.NET中的性能时,托管代码和非托管代码之间没有明显的区别 如果非托管代码都在.NET上运行,我会将其转换为托管代码 我只是觉得你不应该担心这个级别的性能瓶颈。如果你在做游戏开发,你应该担心网络和图形的性能(使用着色器) 编辑:
“最大执行速度。托管层会给程序增加大约10%的开销。”(对于windows mobile)我相信在.NET中,托管代码和非托管代码的性能没有明显的区别 如果非托管代码都在.NET上运行,我会将其转换为托管代码 我只是觉得你不应该担心这个级别的性能瓶颈。如果你在做游戏开发,你应该担心网络和图形的性能(使用着色器) 编辑:
“最大执行速度。托管层会给程序增加大约10%的开销。”(对于windows mobile)由于您的代码没有那么简单,我会告诉您这取决于您要转换为非托管代码的代码类型。如果代码涉及复杂的数值运算,那么非托管版本可能会比托管版本快,但我认为您应该更多地检查算法,而不是编译器如何编译或优化代码。因为您的代码没有那么简单,我认为这取决于您要转换为非托管代码的代码类型。如果代码涉及复杂的数值操作,非托管版本可能比托管版本快,但我认为您应该更多地检查算法,而不是编译器如何编译或优化代码。我认为您忘记了提到问题创建控制台应用程序,将代码包装在秒表中,在多次迭代中执行它,并将整个过程重复两次。你得到了什么?在他帖子的底部…“为什么?哪一个更快?”请不要老是问同样的问题question@lightwing高代表性用户有权投票关闭,无需留下评论。无论如何,我现在已经回答了你的问题。我想你忘了提这个问题。创建一个控制台应用程序,将代码包装在秒表中,在多次迭代中执行,然后将整个过程重复两次。你得到了什么?在他帖子的底部…“为什么?哪一个更快?”请不要老是问同样的问题question@lightwing高代表性用户有权投票关闭,无需留下评论。不管怎样,我现在已经回答了你的问题。
static class GameSharp
{
public static class GameSharpClass
{
public static int SimulateGameDLL(int a, int b) {
return a*b; //Calculation in managed code
}
}
}