微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 在Win32/COM方法上调用PInvoke时,通常有一个明显的性能下降吗?

我想知道有没有人有一个体面的解释或概述在使用DLLImport / PInvoke在Win32方法从负责的网络代码

我打算利用各种Win32方法,并希望更好地了解这样做的负面影响。

谢谢,

布莱恩。

根据 MSDN – Calling Native Functions from Managed Code

PInvoke has an overhead of between 10 and 30 x86 instructions per call. In addition to this fixed cost,marshaling creates additional overhead. There is no marshaling cost between blittable types that have the same representation in managed and unmanaged code. For example,there is no cost to translate between int and Int32.

根据我的经验,当P /调用本机功能时,绝对会有一个开销,但是通常性能下降并不值得担心。封送费用是要记住的。如果您正在传递大型结构,字符串等,那么性能成本将很快显现。

对于非常频繁调用的P /调用函数,您可能需要考虑将[SuppressUnmanagedCodeSecurity]添加到P / Invoke函数定义(参见MSDN – SuppressUnmanagedCodeSecurityAttribute)。这将使运行时停止堆栈步行,以确保调用者具有非管理代码权限。当然,请确保您在添加属性之前了解安全性后果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐