Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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/apache-kafka/3.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#_Interop - Fatal编程技术网

C# 在委托中存储平台调用的性能优势?

C# 在委托中存储平台调用的性能优势?,c#,interop,C#,Interop,OpenTK通过首先定义一个具有与某个目标C函数匹配的签名的委托来绑定到OpenGL: [System.Security.SuppressUnmanagedCodeSecurity()] internal delegate void Uniform1f(Int32 location, Single v0); internal static Uniform1f glUniform1f; 然后它将一个值赋给glUniform1f,该值是从特定于平台的OpenGLGetProcAddress函数返回

OpenTK通过首先定义一个具有与某个目标C函数匹配的签名的委托来绑定到OpenGL:

[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate void Uniform1f(Int32 location, Single v0);
internal static Uniform1f glUniform1f;
然后它将一个值赋给
glUniform1f
,该值是从特定于平台的OpenGL
GetProcAddress
函数返回的


如果我不使用OpenTK的方法,而只是使用DllImport pinvoke函数,我的代码会执行得更慢吗?(换句话说,使用委托是否有任何性能优势)。

否,如果有任何影响,则会因为使用委托而导致性能下降(尽管在大多数情况下,这一点微不足道)

记住,委托是对方法的引用。每次调用时,都必须取消引用。将其与编译到代码中的方法调用进行比较;当方法引用被烘焙到IL中时,运行库确切地知道它必须去哪里

请注意,自.NET3.0以来,代理性能已显著提高。随着LINQ的引入,代理将被大量使用,而且由于它们无处不在,它们必须非常快

您看到使用委托的一个可能原因是,需要在运行时确定包含非托管代码的DLL(可能是因为命名问题、以不同名称分布在一起的特定于处理器的生成等)

在这种情况下,先调用非托管对象,然后调用非托管对象

检索函数poitner后,将其传递给上的以获取委托