什么叫应用程序域?(zhuan)

什么叫应用程序域?(zhuan) 一:应用程序域介绍:    "域",就是范围,环境,边界的意思,那么什么是应用程序域,官方给出的是这样的解释:操作系

大家好,又见面了,我是你们的朋友全栈君。

 

一:应用程序域 介绍:

     “域”,就是范围,环境,边界的意思,那么什么是应用程序域,官方给出的是这样的解释:操作系统和运行库环境通常会

在应用程序间提供某种形式的隔离.

     应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,

运行库宿主负责在运行应用程序之前引导公共语言运行库。

  应用程序域本质上就就是一种隔离,目的也就是使应用程序中运行的代码不能直接访问其他应用程序中的代码或资

源如果你需要访问其他应用程序中的对象时你就可以复制这些对象,或通过代理访问这些对象.

二:应用程序域和程序集

    应用程序域和程序集之间的关系。在可以执行程序集中所包含的代码之前,必须将程序集加载到应用程序域中。

运行普通的应用程序会导致将几个程序集加载到一个应用程序域中。

      程序集的加载方式决定其实时 (JIT) 编译代码是否可以在进程中由多个应用程序域共享,以及该程序集是否可以

从进程中卸载:

1:如果程序集是以非特定于域的形式进行加载,则共享相同安全授权集的所有应用程序域都可以共享相同的 JIT 编

译代码,从而减少应用程序所需的内存。但是,程序集则永远不能从进程中卸载。

2:如果程序集不是以非特定于域的形式进行加载,则它必须在加载的每个应用程序域中都是 JIT 编译的。但是,通过卸载程序集加载的所有应用程序域,可以从进程中卸载程序集。

三:AppDomain class 的使用

在.NET Framework 提供了AppDomain类来实现以创建和卸载域、创建域中各类型的实例.那么该类中有哪些方法呢,

下面我们进行简单的介绍:

1:CreateDomain :用于创新的应用程序域,

2:ExecuteAssembly   or ExecuteAssemblyByName方法:执行应用程序域中的程序集。这是一个实例方法,因此它

可用来执行另一个应用程序域(您拥有对该域的引用)中的代码:

3:CreateInstanceAndUnwrap:在应用程序域中创建指定类型的实例,并返回一个代理。使用此方法以避免将包含创

建的类型的程序集加载到调用程序集.

4:Unload:执行域的正常关闭.只有应用程序域中正在运行的所有线程都已停止或域中不再有运行的线程之后,才卸载

该应用程序域。

四:编程例子:

  以下这个例子显示了如何他创建应用程序域和关闭应用程序域:

using System;
using System.Reflection;
using System.Threading;
class Example
{
public static void Main()
    {       
         string callingDomainName = Thread.GetDomain().FriendlyName;

         string exeAssembly = Assembly.GetEntryAssembly().FullName;
// 设置一个新的应用程序域
        AppDomainSetup a= new AppDomainSetup();
        a.ApplicationBase =
            System.Environment.CurrentDirectory;
        a.DisallowBindingRedirects = false;
        a.DisallowCodeDownload = true;
        a.ConfigurationFile =
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
// 创建新的应用程序域

        AppDomain b= AppDomain.CreateDomain(“b”, null, ads);
                MarshalByRefType mbrt =
            (MarshalByRefType) b.CreateInstanceAndUnwrap(
                exeAssembly,
typeof(MarshalByRefType).FullName
            );
           mbrt.SomeMethod(callingDomainName);
// 关闭应用程序域

        AppDomain.Unload(ad2);
try
        {
// Call the method again. Note that this time it fails
// because the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName);
            Console.WriteLine(“Sucessful call.”);
        }
catch(AppDomainUnloadedException)
        {
            Console.WriteLine(“Failed call; this is expected.”);
        }
    }
}
public class MarshalByRefType : MarshalByRefObject
{

//通过代理调用方法

public void SomeMethod(string callingDomainName)
    {

         AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
           Console.WriteLine(“AppName={0}, AppBase={1}, ConfigFile={2}”, 
            a.ApplicationName, 
            a.ApplicationBase, 
            a.ConfigurationFile
        );
               Console.WriteLine(“Calling from ‘{0}’ to ‘{1}’.”,   callingDomainName,

                     Thread.GetDomain().FriendlName );
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155676.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 下列那个类有获取PropertyDescriptor实例的方法_java反射怎么理解

    下列那个类有获取PropertyDescriptor实例的方法_java反射怎么理解JAVA中反射机制(JavaBean的内省与BeanUtils库)内省(Introspector)是Java语言对JavaBean类属性、事件的一种缺省处理方法。  JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(ValueOb…

    2022年10月1日
  • java数组转对象_java之数组和对象的互转「建议收藏」

    java数组转对象_java之数组和对象的互转「建议收藏」java*对象转bytes和bytes转对象**@projectorder*@fileNameByteUtil.java*@Description*@authorlight-zhang*@date2019年5月16日*@version1.0.0*/publicclassByteUtil{/***对象转数组**@paramobj*@return*/public…

    2022年9月10日
  • recycleview的优化_recyclerview原理

    recycleview的优化_recyclerview原理最近研究应用流畅度专题时,发现RecyclerView里边的坑真多,有很多可以优化的点,在理解优化点之前,最好对RecyclerView的缓存机制有一些了解,比如得知道CacheView和RecycledViewPool的区别和联系,RecyclerView的绘制流程有一定了解,再来谈RecyclerView的性能提升。缓存机制可以看看这篇文章:基于滑动场景解析RecyclerView的回收复用机…

    2022年10月27日
  • idea202112激活码永久(注册激活)[通俗易懂]

    (idea202112激活码永久)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
  • FFM原理理解与应用

    FFM原理理解与应用本文参考了美团团队的介绍文章。http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html以及http://blog.csdn.net/zc02051126/article/details/54614230FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,…

    2022年4月30日
  • 超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白[通俗易懂]

    超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白[通俗易懂]0、排序算法说明0.1排序的定义 对一序列对象根据某个关键字进行排序。 0.2术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度…

    2022年6月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号