zoukankan      html  css  js  c++  java
  • AppDomain 学习笔记

    先推荐一些Appdomain的资料

    1.AppDomain应用程序域的msdn定义

    http://msdn.microsoft.com/library/ZH-CN/113A8BBF-6875-4A72-A49D-CA2D92E19CC8(VS.100)

    2.理解AppDomain
    http://www.360doc.com/content/05/0929/09/73_15757.shtml

    3.C#强化系列文章六:应用程序域(AppDomain)浅析

    http://www.csharpwin.com/csharpspace/124.shtml

    4.基于AppDomain的"插件式"开发
    http://www.cnblogs.com/kongyiyun/archive/2011/08/01/2123459.html

    看过以后, 基本就明白了, 一般情况下我们是不需要理会AppDomain的,它就像空气一样,每时每刻都在用它,但又可以视而不见. 因为CLR在启动的时候会创建系统域(System Domain),共享域(Shared Domain)和默认域(Default Domain),系统域与共享域对于用户是不可见的,默认域也可以说是当前域,它承载了当前应用程序的各类信息(堆栈),所以,我们的一切操作都是在这个默认域上进行.

    运行下面的程序就可以获得一些当前应用程序域的信息:
    namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                //获取当前的应用程序域
                AppDomain currentApp = AppDomain.CurrentDomain;
                Console.WriteLine("FriendlyName:" + currentApp.FriendlyName);
                Console.WriteLine("BaseDirectory:" + currentApp.BaseDirectory);
                Console.WriteLine("Id:" + currentApp.Id);
                Console.ReadKey();

            }        
        }
    }

    看到这个.vshost.exe, 感到有些熟悉, 它存在bin\debug目录下, 它的名称是承载进程 (vshost.exe), 主要作用是帮助调试, msdn定义如下:

    http://msdn.microsoft.com/zh-cn/library/ms185331(v=VS.100).aspx

    如何创建, 卸载域?


    在.NET中提供了AppDomain类为执行托管代码提供隔离、卸载和安全边界。
    AppDomainSetup info = new AppDomainSetup();
     info.LoaderOptimization = LoaderOptimization.SingleDomain;
     AppDomain domain = AppDomain.CreateDomain("lzd",null,info);
     domain.ExecuteAssembly(@"D:\test.exe");
     AppDomain.Unload(domain);

    1、使用AppDomainSetup类定义新域的属性,比如可以设置应用程序的根目录,设置被加载程序的类别。
    例子中使用的是SingleDomain表示加载程序不得在应用程序域之间共享内部资源,还可以使用MultiDomain、MultiDomainHost等其他属性
    2、在第四行创建一个名字为MyDomain的新域
    3、在第5行在新域内部执行一个应用程序
    4、第6行卸载这个新域
    通过这样创建后,新域的执行就算出现系统异常也不会影响到原来域的执行,那么就可以做类似WatchDog(监控子程序,一旦退出就重启)的程序了

    笔者也没有在项目中实际用过Appdomain, 但看资料可间接得知, 它的主要用途在于: 插件开发,  隔离容错, 调用不同版本dll等.

  • 相关阅读:
    线程池七大参数介绍
    线程池的三个使用方式
    线程池使用及优势
    css selector 定位
    xpath 定位小技巧
    centos7部署web测试环境 jdk,tomcat,mysql
    Java 访问修饰符
    webdriver的handle 切换窗口
    P1392 取数
    P3414 SAC#1
  • 原文地址:https://www.cnblogs.com/liuzhendong/p/2192068.html
Copyright © 2011-2022 走看看