如何为回调设置 SuppressUnmanagedCodeSecurity?

发布于 2024-07-27 18:45:26 字数 169 浏览 3 评论 0原文

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

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

When using P/Invoke, adding [SuppressUnmanagedCodeSecurity] can speed calls from managed code into unmanaged code in trusted scenarios.

Is there a way to accomplish the same thing in the reverse direction, to speed things up when I call from unmanaged code back into managed code? Profiling shows a much higher overhead going in that direction in our application.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

楠木可依 2024-08-03 18:45:26

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

反向 P/Invoke 封送性能

I haven't found anything about suppressing code security, maybe because there's no such stack-walking checks calling from the unmanaged side, but how you marshal your types has an effect on performance. Here's a link showing different ways of marshaling strings, and the perf results:

Reverse P/Invoke Marshaling Performance

ゃ人海孤独症 2024-08-03 18:45:26

我不认为存在从非托管到托管的任何此类安全检查。

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

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

然后我将 [SuppressUnmanagedCodeSecurityAttribute()] 添加到 Managed ---> 非托管呼叫和安全检查变为 0。

I don't believe that there's any such security check from unmanaged into managed.

You can see the security checks counted as they occur if you go to Process Explorer. Find your process, click on Properties, Go to the .NET tab and select ".NET CLR Security" from the drop down.

I wrote a simple test app that just calls into unmanaged code, passing a delegate and then the unmanaged code calls that delegate immediately. There was a security check counted for each call in my test loop.

Then I added [SuppressUnmanagedCodeSecurityAttribute()] to the Managed ---> Unmanaged call and the security checks went to 0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文