Как установить SuppressUnmanagedCodeSecurity для обратных вызовов? - PullRequest
3 голосов
/ 15 июля 2009

При использовании P / Invoke добавление [SuppressUnmanagedCodeSecurity] может ускорить вызовы из управляемого кода в неуправляемый код в доверенных сценариях.

Есть ли способ выполнить то же самое в обратном направлении, чтобы ускорить процесс, когда я вызываю неуправляемый код обратно в управляемый код? Профилирование показывает гораздо более высокие накладные расходы в этом направлении в нашем приложении.

Ответы [ 2 ]

3 голосов
/ 15 июля 2009

Я не нашел ничего о подавлении безопасности кода, возможно, потому что нет таких проверок обхода стека, вызываемых неуправляемой стороной, но то, как вы распределяете свои типы, влияет на производительность. Вот ссылка, показывающая различные способы маршалинга строк и результаты выполнения: http://blogs.msdn.com/junfeng/archive/2007/07/09/reverse-p-invoke-marshaling-performance.aspx

0 голосов
/ 22 марта 2010

Я не верю, что есть такая проверка безопасности от неуправляемой до управляемой.

Если вы заходите в Process Explorer, вы можете видеть, что проверки безопасности подсчитываются по мере их возникновения. Найдите свой процесс, нажмите Свойства, перейдите на вкладку .NET и выберите «.NET CLR Security» из выпадающего списка.

Я написал простое тестовое приложение, которое просто вызывает неуправляемый код, передает делегат, а затем неуправляемый код вызывает этот делегат немедленно. В каждом цикле тестирования подсчитывалась проверка безопасности для каждого вызова.

Затем я добавил [SuppressUnmanagedCodeSecurityAttribute ()] в неуправляемый вызов Managed --->, и проверки безопасности перешли на 0.

...