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

  • 相关阅读:
    3.18日
    线程的面试题
    关于instanceof测试遇到的问题
    spring
    自动登录代码
    Filter
    多态
    基于HTML,css,jQuery,JavaScript,MySQL搭建博客系统
    基于bootstrap+MySQL搭建动态网站
    基于bootstrap_网站汇总页面
  • 原文地址:https://www.cnblogs.com/zh7791/p/13704928.html
Copyright © 2011-2022 走看看