• .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方法即可 执行委托。
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    拼多多API接入说明,Onebound数据
    Java#20(包和final)
    神经元的结构模型图片,神经元模型图片解析
    JAVA中JPanel类方法汇总
    2023最新!Git2.40.0于win10环境下的安装
    ECO概念及理解
    MySQL约束和事务知识归纳。
    基于javaweb的在线图书商城系统(java+ssm+jsp+jquery+mysql)
    配置适合树莓派的linux内核(对内核的配置,编译,并将编译好的内核挂载到树莓派上)(面试)
    Unity 代码控制Text文本换行
  • 原文地址:https://blog.csdn.net/u013400314/article/details/126761474