當我使用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