• .NET AppDomain、Process 、Context


    使用.NET建立的可执行程序 .exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中。应用程序域 是.NET引入的一个新概念,它比进程所占用的资源要少,可以被看作是一个轻量级的进程。 **在一个进程中可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序(.exe)或者多个程序集(*.dll)**。这样可以 使应用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作。
    当一个程序集同时被多个应用程序域调用时,会出现两种情况:
    第一种情况:CLR分别为不同的应用程序域加载此程序集。
    第二种情况:CLR把此程序集加载到所有的应用程序域之外,并实现程序集共享,此情况比较特殊,被称作为Domain Neutral。
    在这里插入图片描述
    在这里插入图片描述

    var appDomain = AppDomain.CreateDomain(“NewAppDomain”);
    appDomain.Load(“Model”); foreach (var assembly in
    appDomain.GetAssemblies())
    Console.WriteLine(string.Format(“{0}\n----------------------------”,
    assembly.FullName)); Console.ReadKey();
    当需要在AppDomain加载可执行程序时,可以使用ExecuteAssembly方法。
    AppDomain.ExecuteAssembly(“Example.exe”);

    在AppDomain中建立程序集中指定类的对象
    使用CreateInstance方法,能建立程序集中指定类的对像。但使用此方法将返回一个ObjectHandle对象,若要将此值转化为原类 型,可调用Unwrap方法。 下面例子会建立Model.dll程序集中的Model.Person对象。
    namespace Test {
    public class Program
    {
    static void Main(string[] args) {
    var person=(Person)AppDomain.CurrentDomain .CreateInstance(“Model”,“Model.Person”).Unwrap();
    person.ID = 1;
    person.Name = “Leslie”;
    person.Age = 29;
    Console.WriteLine(string.Format(“{0}'s age is {1}!”,person.Name,person.Age));
    Console.ReadKey();
    }
    }
    }
    namespace Model {
    public class Person
    {
    public int ID {
    get; set;
    }
    public string Name {
    get; set;
    }
    public int Age {
    get; set;
    }
    }
    }
    跨AppDomain运行代码
    在应用程序域之间的数据是相对独立的,当需要在其他AppDomain当中执行当前AppDomain中的程序集代码时,可以使用 CrossAppDomainDelegate委托。把CrossAppDomainDelegate委托绑定方法以后,通过AppDomain的DoCallBack方法即可 执行委托。
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【学习笔记之Linux】云服务器搭建
    网络传输中的编码与解码
    数据结构与算法学习(day3)——快速排序
    基于springboot实现财务管理系统项目【项目源码+论文说明】
    竞赛 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR
    TCP/IP协议:互联网通信的基础
    STM32基于HAL库的USART+DMA使用
    Appium+python+unittest搭建UI自动化框架!
    java计算机毕业设计销售管理系统演示录像源码+数据库+系统+lw文档+mybatis+运行部署
    springboot移除nacos yml无法加载
  • 原文地址:https://blog.csdn.net/u013400314/article/details/126761474