我想知道是否有人对在托管 .Net 代码的 Win32 方法上使用 DLLImport / PInvoke 的负面方面有一个不错的解释或概述?
我计划使用各种 Win32 方法,并希望更好地了解这样做的负面影响。
Thanks,
Brian.
根据MSDN - 从托管代码调用本机函数 http://msdn.microsoft.com/en-us/library/ms235282.aspx
PInvoke 每次调用的开销为 10 到 30 个 x86 指令。除了这个固定成本之外,编组还会产生额外的开销。在托管和非托管代码中具有相同表示形式的 blittable 类型之间没有封送成本。例如,int 和 Int32 之间的转换是没有成本的。
根据我的经验,P/调用本机函数时肯定会产生开销,但通常不值得担心性能损失。编组成本是需要记住的事情。如果您传递大型结构、字符串等,那么性能成本将很快显现出来。
对于调用非常频繁的 P/Invoked 函数,您可能需要考虑添加[SuppressUnmanagedCodeSecurity]
到您的 P/Invoke 函数定义(请参阅MSDN - 抑制非托管代码安全属性 http://msdn.microsoft.com/en-us/library/system.security.suppressunmanagedcodesecurityattribute.aspx)。这会阻止运行时执行堆栈遍历,以确保调用者具有 UnmanagedCode 权限。当然,在添加此属性之前,请确保您了解安全后果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)