我经常使用反编译器时,会遇到很多不安全的代码。有人知道.NET有多少是非托管/安全的吗?
我经常使用反编译器时,会遇到很多不安全的代码。有人知道.NET有多少是非托管/安全的吗?
这是一个非常难回答的问题。不安全的代码很容易量化,因为它存在于二进制文件中,并且可以用IL指令来衡量。
真正的非托管代码,例如PInvoke或COM,在二进制文件中确实有代码,但是其规模微不足道。它只代表调用本地函数所必需的最小存根。这意味着您无法真正衡量托管DLL中正在执行多少本机代码。您能做的就是测量调用次数,这并不能真正衡量正在执行多少非托管代码。
许多System.Windows.Forms调用未管理的Windows API,但我没有发现需要手动处理在此命名空间中创建的对象的需要。
当使用System.IO.FileStream类(也调用未管理的代码)时,请确保在完成后调用Dispose,以便您可以保证文件在那里关闭,而不是在终结器执行时。
这并不重要,因为不安全的调用被相应的.NET对象包装起来了。你需要关注的是资源分配和处理实现IDisposable接口的对象。