使用P / Invoke时,添加[SuppressUnmanagedCodeSecurity]可以加快托管代码中的调用,使其成为受信任场景中的非托管代码。
有没有办法在反方向上完成同样的事情,当我从非托管代码调用回托管代码时加快速度?在我们的应用程序中,分析显示了朝着这个方向发展的更高开销。
答案 0 :(得分:3)
我还没有发现任何关于抑制代码安全性的事情,可能是因为没有这样的堆栈行走检查来自非托管端,但是你如何编组你的类型会对性能产生影响。这是一个显示编组字符串的不同方法的链接,以及perf结果: http://blogs.msdn.com/junfeng/archive/2007/07/09/reverse-p-invoke-marshaling-performance.aspx
答案 1 :(得分:0)
我不相信有任何此类安全检查从非托管到托管。
如果您转到Process Explorer,您可以看到计算出的安全检查。找到您的进程,单击Properties,转到.NET选项卡,然后从下拉列表中选择“.NET CLR Security”。
我编写了一个简单的测试应用程序,它只调用非托管代码,传递委托,然后立即委托代码调用的非托管代码。我的测试循环中的每次调用都计算了安全检查。
然后我将[SuppressUnmanagedCodeSecurityAttribute()]添加到Managed --->非托管呼叫和安全检查进入0。