当我使用Reflector时,我经常遇到很多不安全的代码。任何人都知道.NET有多少是不受管理/安全的?有多少.NET是非托管的?
回答
因为不安全的调用被相应的.NET对象封装,所以它并不重要。你需要关心的是资源分配和处理实现IDisposable的对象。
有许多PInvoke实例只是调用Win32 API。但是,在CLR本身中实现了一些功能(例如,互锁操作)。如果你想看看如何完成,请看Rotor。
我在我的博客上对this post进行了锁定(查看转子源)的详细说明。
要明确回答您的问题,您必须获取所有.NET源代码(例如,使用NetMassDownloader和grep表示“InternalCall”或“DllImport”),并将其与所有行的计数进行比较。也许你可以将这些“非托管”行中的每一行乘以某个要素来猜测,或者你必须潜入Rotor或Windows源代码才能得到实际的数字。如果你走了这么远,那么事情就会变得模糊(例如,如果File.Open调用Win32的CreateFile,那么CreateFile应该算在.NET上?我想不是)。所以,充其量只能通过一些因素来推测“InternalCall”。
许多System.Windows.Forms调用非托管windows API,但我还没有发现需要手动处理在这个命名空间中创建的对象。
当使用System.IO.FileStream类(也调用非托管代码)时,请确保在完成后调用Dispose,以便可以保证文件在那里关闭,然后代替执行终结器。
这是一个很难回答的问题。不安全的代码很容易量化,因为它存在于二进制文件中,可以用IL指令来衡量。
真正的非托管代码,比如说PInvoke或者COM,在二进制文件中有代码,但是它并不重要。它只表示调用本机函数所需的最小存根。这意味着您无法真正衡量在受管DLL中正在执行多少本机代码。你所能做的就是测量调用的数量,它不能真正衡量非托管代码执行的程度。
- 1. .NET中“托管”与“非托管”资源的含义是什么?
- 2. 非托管C++ .NET中
- 3. C#非托管对象的大小是多少?
- 4. .NET中的托管代码和非托管代码
- 5. 将非托管数据映射到.NET中的托管结构
- 6. 调试托管的.NET代码从非托管C++调用
- 7. .Net中的托管和非托管资源
- 8. 是否有任何网站托管.net
- 9. 支持多个版本的非托管DLL的.NET客户端
- 10. 托管和非托管堆
- 11. 托管vs非托管
- 12. DirectX托管或非托管?
- 13. 此DLL是管理还是非托管?
- 14. 在混合C++ .NET应用程序中强调托管还是非托管?
- 15. 从.NET实例化非托管类
- 16. 使用非托管代码.net
- 17. 从非托管C++配置.NET库
- 18. 我的代码是托管还是非托管?
- 19. Microsoft Visual C++ 2003,2005--它们是.Net还是非托管?
- 20. 将非托管/非托管成员添加到托管类
- 21. 具有非托管属性的托管对象是否有错误?
- 22. 使用非托管Oracle提供商所需的最小空间是多少?
- 23. FileStream是托管还是非托管代码?
- 24. COM包装器:它们是托管还是非托管资源?
- 25. Unity游戏对象是托管还是非托管资源?
- 26. 非托管的DLL
- 27. 非托管代码使用的.NET组件的内存管理
- 28. WinRT XAML - 托管和非托管 - 它是如何工作的?
- 29. 确定何时.NET是关于被加载(非托管)C++
- 30. 标准.NET库是否依赖于任何非托管DLLs?
.NET中的哪一部分是你正在谈论的?除非您自己指定代码不安全,否则您的代码不会不安全。 – 2009-03-04 21:30:32
这将如何负责?你想要测量代码行吗? – 2009-03-04 21:32:37
几乎所有的部分都像查看列表,数组类。 – 2009-03-04 21:32:55