Bri*_*ott 26 .net performance pinvoke marshalling dllimport
我想知道是否有人对管理.Net代码在Win32方法上使用DLLImport/PInvoke的负面影响有一个不错的解释或概述?
我计划使用各种Win32方法,并希望对这样做的负面影响有更深入的了解.
谢谢,
布莱恩.
Lee*_*ger 35
PInvoke每次调用的开销在10到30 x86之间.除了这个固定成本之外,编组还会产生额外的开销.在管理和非托管代码中具有相同表示的blittable类型之间没有编组成本.例如,在int和Int32之间进行转换没有成本.
根据我的经验,在P/Invoking本机函数时肯定存在开销,但通常性能损失不值得担心.编组成本是需要记住的.如果您传递大型结构,字符串等,那么性能成本将很快显示出来.
对于非常频繁调用的P/Invoked函数,您可能需要考虑添加[SuppressUnmanagedCodeSecurity]到P/Invoke函数定义(请参阅MSDN - SuppressUnmanagedCodeSecurityAttribute).这会阻止运行时执行堆栈遍历以确保调用方具有UnmanagedCode权限.当然,在添加此属性之前,请确保您了解安全性后果.