Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从托管代码性能调用本机代码_C#_.net_Performance_Pinvoke - Fatal编程技术网

C# 从托管代码性能调用本机代码

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

这是一个简单的例子

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);
    }
}

第一个:我有一个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
        }
    }
}