• 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 的功能和功能,如语言互操作性、自动内存管理、异常处理机制、代码访问安全性等。

  • 相关阅读:
    做SQL解析时遇到的问题
    SqlAnalyzer1.00源码
    用于测试SqlAnalyzer1.00的十七个测试用例
    XmlAnalyzer1.00 源码
    用于测试XmlAnalyzer 1.00版的八个测试用例
    JsonAnalyzer2 1.01版
    用于测试 JsonAnalyzer2 1.01版的测试用例
    按照BNF语法重新写就的JsonAnalyzer2
    递归向下解析算术表达式(四)
    允许Sublime编辑器在Ubuntu上输入中文
  • 原文地址:https://www.cnblogs.com/zh7791/p/13704928.html
Copyright © 2020-2023  润新知