如何为回调设置 SuppressUnmanagedCodeSecurity?

问题描述 投票:0回答:2

使用P/Invoke时,添加[SuppressUnmanagedCodeSecurity]可以加快受信任场景下从托管代码到非托管代码的调用。

有没有办法以相反的方向完成同样的事情,以便当我从非托管代码调用回托管代码时加快速度?分析显示,在我们的应用程序中,朝这个方向发展的开销要高得多。

c# .net optimization clr c++-cli
2个回答
3
投票

我还没有发现任何有关抑制代码安全性的信息,也许是因为没有从非托管端调用的此类堆栈遍历检查,但是如何编组类型会对性能产生影响。以下链接显示了编组字符串的不同方法以及性能结果:

反向 P/调用封送性能


1
投票

我不相信有任何这样的从非托管到托管的安全检查。

如果您转到 Process Explorer,您可以看到安全检查发生时的计数。找到您的进程,单击“属性”,转到“.NET”选项卡,然后从下拉列表中选择“.NET CLR 安全性”。

我编写了一个简单的测试应用程序,它只调用非托管代码,传递委托,然后非托管代码立即调用该委托。在我的测试循环中,每个呼叫都会进行一次安全检查。

然后我将 [SuppressUnmanagedCodeSecurityAttribute()] 添加到托管 ---> 非托管调用,安全检查变为 0。

© www.soinside.com 2019 - 2024. All rights reserved.