zoukankan      html  css  js  c++  java
  • 应用程序域(Application Domain)

    大家都知道,.net写的程序,都是托管的,何为托管?就是让“其他的程序”来管理,也解析运行,什么又在这里充当“其他程序”呢?这里大体上说是CLR(通用语言运行时),这只是大体上的,准确的在底层是怎么去处理托管程序与操作系统间的关系呢?

    操作系统上运行的都是进程,这进程是非托管的。现在。我们有一个Demo.exe,他是用.net写的(这里与语言无关了,因为编设成程序集后,都成为IL语言了),当然是一个托管理程序。这里的问题就是怎么把Demo.exe变成一个进程,运行在操作系统的进程中。这里就引出了应用程序域(Application Domain),应用程序域(Application Domain)是“托管理代码与非托管理代码之间的桥梁”(引自《.NET组件编程设计》),进程,应用程序域,.net程序集(这里是Demo.exe),之间的关系可以见下图:

     

    (图1)
    一个进程中可以有多个应用程序域(Application Domain),一个应用程序域(Application Domain)中可以有多个程序集。

    应用程序域(Application Domain)的引入的好处在于,如果一个程序集出现错误,不会影响到别的应用程序域(Application Domain),同时他们又是一个进程中的。

    .net中,应用程序域(Application Domain)是用AppDomain类来表示的。

    AppDomain CurrentAD=AppDomain.CurrentDomain;

    上面的代码实现了获取当有程序集所在的应用程序域(Application Domain)。获取当前应用程序域(Application Domain)还可以通过当前线程来得到,如下:

    AppDomain CurrentAD=Threed.GetDomain();

    下面再看一下在当前应用程序域(Application Domain)中创建对象:

    类:

    Class Class1

    {

       Public void FF()

    {

      //实现功能

    }

    {

    AppDomain CurrentAD=Threed.GetDomain();

    Class1 C1=(Class1)CurrentAD.CreateInstanceAndUnwrap(程序集名称,名命空间.类名);

    C1.FF();

    这个是关于当前的应用程序域(Application Domain)的操作,怎么创建一个应用程序域(Application Domain)呢?看下面

    AppDomain MyAppDomain=AppDomain.CreatDomain(MyNewAD);

    Class1 C1=(Class1)MyAppDomain.CreateInstanceAndUnwrap(程序集名称,名命空间.类名);

    C1.FF();

    AppDomain MyAppDomain=AppDomain.CreatDomain(MyNewAD);

    IObjectHandle handle=MyAppDomain.CreateInstance 程序集名称,名命空间.类名);

    Class1 C1=(Class1)handle.Unwrap();

    C1.FF();

    后都的好处在于用C1这个对象的时候才进处理。

  • 相关阅读:
    poj 3273 Monthly Expense(贪心+二分)
    codeforces 235 div2 C Team
    ZOJ 3607 Lazier Salesgirl(贪心)
    poj 1185 炮兵阵地(三维状态压缩dP)
    poj 2411 Mondriaan's Dream(状态压缩dP)
    sdut 2819 比赛排名(边表 拓扑排序)
    hdu 1421 搬寝室(dp)
    hdu 1243 反恐训练营(dp 最大公共子序列变形)
    Codeforces Round #232 (Div. 2) B. On Corruption and Numbers
    hdu 1559 最大子矩阵 (简单dp)
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/1246980.html
Copyright © 2011-2022 走看看