使用P/Invoke时,添加[SuppressUnmanagedCodeSecurity]可以在受信任的场景中将来自托管代码的调用加速到非托管代码。如何为回调设置SuppressUnmanagedCodeSecurity?
当我从非托管代码调回托管代码时,有什么方法可以在相反方向完成相同的事情,以加快速度?在我们的应用程序中,性能分析显示在这方面开销要高得多。
使用P/Invoke时,添加[SuppressUnmanagedCodeSecurity]可以在受信任的场景中将来自托管代码的调用加速到非托管代码。如何为回调设置SuppressUnmanagedCodeSecurity?
当我从非托管代码调回托管代码时,有什么方法可以在相反方向完成相同的事情,以加快速度?在我们的应用程序中,性能分析显示在这方面开销要高得多。
我还没有发现任何关于压制代码安全性的问题,也许是因为没有从非托管端调用堆栈行走检查,但是如何编组您的类型会影响性能。这里有一个链接,显示编组字符串的不同方式,以及性能结果: http://blogs.msdn.com/junfeng/archive/2007/07/09/reverse-p-invoke-marshaling-performance.aspx
我不认为有任何这样的安全检查从非托管到托管。
如果您进入Process Explorer,您可以看到安全检查发生时的计数。找到你的过程,点击属性,转到.NET选项卡,然后从下拉菜单中选择“.NET CLR安全性”。
我写了一个简单的测试应用程序,只调用非托管代码,传递一个委托,然后非托管代码调用立即委托。在我的测试循环中,每次调用都有一次安全检查。
然后我说[SuppressUnmanagedCodeSecurityAttribute()]到托管--->未管理的呼叫和安全检查去了0
但我在与回调速度类似的问题,所以让我知道,如果你”我学到了有用的东西。 – 2010-03-22 19:02:27