我正在使用一个广泛使用 p/invoke 的对时间敏感的桌面应用程序,我想确保代码不会在 CAS stackwalks 上浪费大量时间。
我在我认为有必要的地方使用了 SuppressUnmanagedCodeSecurity 属性,但我可能错过了一些地方。有谁知道是否有办法监控正在发生的 CAS stackwalk 的数量,并更好地查明安全需求的来源?
我正在使用一个广泛使用 p/invoke 的对时间敏感的桌面应用程序,我想确保代码不会在 CAS stackwalks 上浪费大量时间。
我在我认为有必要的地方使用了 SuppressUnmanagedCodeSecurity 属性,但我可能错过了一些地方。有谁知道是否有办法监控正在发生的 CAS stackwalk 的数量,并更好地查明安全需求的来源?
您可以使用 Process Explorer 工具(来自 Sysinternals)来监控您的流程。
调出 Process Explorer,选择您的进程并右键单击以显示“属性”。然后,在 .NET 选项卡上,选择要监视的 .NET CLR Security 对象。Process Explorer 将显示计数器
这些是此处描述的标准安全性能计数器-> http://msdn.microsoft.com/en-us/library/adcbwb64.aspx
您还可以使用 Perfmon 或编写自己的代码来监视这些计数器。
据我所知,唯一真正有用的是第 1 项。您可以在调试时密切关注它,看看它是否在显着增加。如果是这样,您需要检查导致安全需求的原因。
我不知道有任何其他工具会告诉您何时触发堆栈行走。