当前位置:  开发笔记 > 编程语言 > 正文

.NET有多少是不受管理的?

如何解决《.NET有多少是不受管理的?》经验,为你挑选了2个好方法。

我经常在使用Reflector时遇到很多不安全的代码.任何人都知道.NET有多少是非托管/安全的?



1> Jeff Moser..:

有许多PInvoke实例只调用Win32 API.但是,有一些功能在CLR本身中实现(例如,互锁操作).如果您想了解这是如何完成的,请查看Rotor.

我在博客上的这篇文章中详细解释了锁定(查看转子源).

要专门回答您的问题,您必须获取所有.NET源代码(例如,对于说"InternalCall"或"DllImport"的行使用NetMassDownloader和grep),并将其与所有行的计数进行比较.也许您可以将这些"非托管"行中的每一行乘以某种因素进行猜测,或者您必须深入研究Rotor或Windows源代码以获取实际数字.如果你走得这么远,那么事情会变得模糊(例如,如果File.Open调用Win32的CreateFile,那么CreateFile应该计入.NET吗?我想不是).所以,你最多只能将"InternalCall"乘以一些因素来猜测.



2> JaredPar..:

这是一个非常难以回答的问题.不安全代码很容易量化,因为它存在于二进制文件中,可以根据IL指令进行测量.

真正的非托管代码,比如PInvoke或COM,确实在二进制文件中有代码,但它无关紧要.它仅表示调用本机函数所需的最小存根.这意味着您无法真正测量托管DLL中的本机代码的执行程度.您所能做的就是测量调用次数,这些调用没有真正衡量非托管代码执行的程度.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有