C#托管代碼與非托管代碼


了解C#.NET應用程序中的托管代碼和非托管代碼

當我們使用VisualStudio並使用任何支持DotNet的編程語言(如 C#、VB 等)在DotNet中創建任何exe(即控制台應用程序、窗口應用程序、類庫項目等)或 Web 應用程序(即 ASP.NET MVC、Web API、ASP.NET 等)時,
這些應用程序完全在 CLR(通用語言運行時)的控制之下運行。

這意味着,如果應用程序具有未使用的對象,則 CLR 將使用垃圾回收器清理這些對象。如果應用程序想要與其他應用程序通信,則它請確保 CTS(通用類型系統)可用。
如果應用程序具有適當的執行權限,CLR 將使用 CAS(代碼訪問安全性)。CLR 將加載您的應用程序並卸載應用程序等。因此,為了更好的理解,如下圖所示。

現在,假設在DotNet應用程序中使用了其他第三方 exe,如 Skype、PowerPoint、Microsoft Excel 等。
這些 exe 不是在DotNet中制造的,它們使用其他編程語言(如 C、C++等)。

在應用程序中使用這些 exe 時,這些 exe 不會由 CLR 運行。即使您在點網絡應用程序中運行這些 exe,它們也要在他們自己的環境中運行。
例如,如果使用 C 或 C++開發 exe,則該 exe 將在運行時環境中的 C C++下運行。在同一行中,如果使用 VB6 創建 exe,則它將在 VB6 運行時環境中運行。

.NET中托管和未托管的代碼到底是什么?

在 CLR 完全控制下運行的代碼在 .NET 中稱為托管代碼。
這些類型的代碼(C# 中的托管代碼)由點網絡運行時環境運行。
如果未安裝點網框架,或者點網運行時不可用,則不會執行這些類型的代碼。
CLR 將為托管代碼執行提供 .NET 的所有設施和功能,如語言互操作性、自動內存管理、異常處理機制、代碼訪問安全性等。

另一方面,Skype,PowerPoint,MicrosoftExcel不需要點網絡運行時,它們在他們自己的環境中運行。
因此,簡言之,不在 CLR 控制下運行的代碼(exe,Web app)在 .NET 中稱為非托管代碼。
CLR 不會向 C# 執行中的非托管代碼提供任何 .NET 的功能和功能,如語言互操作性、自動內存管理、異常處理機制、代碼訪問安全性等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM