C# 在委托中存储平台调用的性能优势?
OpenTK通过首先定义一个具有与某个目标C函数匹配的签名的委托来绑定到OpenGL: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函数返回
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate void Uniform1f(Int32 location, Single v0);
internal static Uniform1f glUniform1f;
然后它将一个值赋给glUniform1f
,该值是从特定于平台的OpenGLGetProcAddress
函数返回的
如果我不使用OpenTK的方法,而只是使用DllImport pinvoke函数,我的代码会执行得更慢吗?(换句话说,使用委托是否有任何性能优势)。否,如果有任何影响,则会因为使用委托而导致性能下降(尽管在大多数情况下,这一点微不足道) 记住,委托是对方法的引用。每次调用时,都必须取消引用。将其与编译到代码中的方法调用进行比较;当方法引用被烘焙到IL中时,运行库确切地知道它必须去哪里 请注意,自.NET3.0以来,代理性能已显著提高。随着LINQ的引入,代理将被大量使用,而且由于它们无处不在,它们必须非常快 您看到使用委托的一个可能原因是,需要在运行时确定包含非托管代码的DLL(可能是因为命名问题、以不同名称分布在一起的特定于处理器的生成等) 在这种情况下,先调用非托管对象,然后调用非托管对象 检索函数poitner后,将其传递给上的以获取委托