对了AppDomain 的微软官方的解释也好,网络上的文章也好,都看过了,但是其中的几点还是不是很明白!
  关于AppDomain是WINDOW进程中的一个逻辑单元,是.net 托管世界中的应用程序在其中执行的独立环境,每个AppDomain 之间是相互隔离的,有各自的配置信息、存储区域、引用、执行边界和安全策略,但是有可以彼此通信 等等等等等等它的作用都很清楚  不清楚的是: 1.什么时候会出现多个AppDomain 同时运行的时候?而且会进行域间的通信!(最好用详细例子说明)
              
               2.“应用程序域把任何一个进程分解到多个应用程序域中,每个应用程序域大致对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中”  这句怎么理解?是对还是错? 我目前天真的理解:是包含在一个进程中的所有应用程序都会在除了它自己的每个应用程序域中分配一个线程? 如果是又是怎么做到的呢?如果不是又是怎么实现域间通信的呢?    小弟才疏学浅!期待高手解惑!

解决方案 »

  1.   

    AppDomain: 
    应用程序域通常由运行库宿主以编程的方式来创建和操作。但是,有时应用程序还可能要和应用程序域结合起来使用。例如,应用程序可以将一个应用程序组件卸载到一个域中,以避免停止整个应用程序。
      

  2.   

    这年头,.net你了解底层能写代码,不了解底层也能写代码
      

  3.   


    如果只是个Coder,就安分守己地写写代码,不要想太多。
      

  4.   


    要干CODER干的事  但远远超过他要干的!CSDN的高手啊! 我在呼唤你们! 最近做C#的教案,在这里迷惑了两天了! 给点儿金玉良言点醒下小弟!
      

  5.   

    知道C++吗?以Win32的C++程序为例,一个程序被编译成了 a.exe。
    那么a.exe运行,就是Windows的一个进程,你再运行它,就又是一个进程。
    进程中存在两个a.exe的进程,但是彼此之前不能通信(除非用一些进程通信的手段)知道Java吧,一个Java程序的运行,可以在一个JVM的进程内,也可以在多个JVM的进程中。
    问题是它们尽管是走一样的代码逻辑,但是不能通信。
    现在到了.Net了,一个a.exe,是一个dot net的程序。
    它只能走单进程的方式,单进程在Windows上意味着进程的切换的奢侈~~。
    如果能有一个类似于Java的,在一个进程内,而Application和Application之间又能彼此不可通信。
    那样就好多了。
    这样就有了AppDomain的概念。这个在IIS上面是有体现的。IIS上面的不同Application既可以处于同一个Windows进程,又可以安全的隔离开。
    这个AppDomain,可以简单理解为大于线程资源访问范围,而又小于进程的一个设计。
    以上是我胡说八道的猜测
      

  6.   

    想了解底层,看看CLR Via C# 吧,应该会有帮助//书买了,但是我没看到那呢,只看了三分之二了...
    我这有电子版的,你要的话,我给你发过去?email?
      

  7.   


    好的 谢谢 [email protected]
      

  8.   

    比如form传值可以用
    AppDomain.CurrentDomain.SetData()和GetData()传值,相当于session
      

  9.   


    哈,不错,给我份呗,谢了
    [email protected]
      

  10.   


    同求,可否?
    [email protected]
    谢谢
      

  11.   

    操作系统是人做出来的,不是说必须依靠CPU硬件支持才能区分进程,操作系统本身依靠软件也可以。但是Win32进程(由于历史原因)是依赖特定CPU体系结构的,.NET系统却可以在一个Win32进程程序内部使用纯粹软件方式区分出类似于进程的多个AppDomain而分别管理。为什么.NET不跨平台?没有必要。但是这不是说.NET没有跨平台的本事,它为那些功能做的尝试(得到的成果)都是藏起来了,做到了点到为止,首先用于微软的服务器系统设计。
      

  12.   

    “却可以在一个Win32进程程序内部”这里多打了“程序”两个字,我的意思不包括程序这个概念。
      

  13.   

    更多的内容,你可以看看msdn,使用google搜索例如“AppDomain.CreateDomain”这样的关键字等等。
      

  14.   

    您的邮件大小超出收件人([email protected])所在服务商的限制,对方不予接收。 
    host mx4.hotmail.com[65.55.37.88] said: 552 Data size must not exceed 29000K bytes. (in reply to EHLO command) 
      

  15.   

    上边有的email都发过了...但有个发送失败//睡午觉了....
      

  16.   

    先声明 NO teacher   要不就误人子弟了! 
      

  17.   

    那能说说你对AppDomain的理解吗?
      

  18.   

    AppDomain使用不是很普遍,实际上是非常特殊的场景下才需要用到AppDomain。最常见的使用AppDomain的情况就是WebApplication了,一个IIS里可以有很多不同WebApp,怎么保证它们不会互相干扰、每个WebApp可以有自己的独立的配置、可以单独重新启动?这时候就要用到AppDomain,事实上每个WebApp都有自己独立的应用程序域,这里有篇文章用实际的测试说明了进程、应用程序池、应用程序域之间的关系,还有这篇是从理论上说明应用程序和应用程序域的关系,说得就比较抽象了,可以先按前一篇动手做下测试,积累一些感性认识。在程序中需要用到AppDomain的场合应该是很少的,我想至少应该是很复杂或很特殊的项目,比如像IIS那样需要动态加载根本不知道是谁写的应用程序的某个大型宿主程序。
    这篇文章提到了一些可能用到AppDomain的情境,包括:隔离容易崩溃的代码、需要加载不同安全级别的程序集、临时使用一个AppDomain以便回收节约资源、加载同一程序集的不同版本(重名不同实现的类)。
    这些情况在普通项目中基本是不会发生的,我只遇到过最后一种情况,那是一个遗留项目,我要对它进行重写,但是有部分代码(加解密部分)体量过大,一时改不过来,我就建了一个AppDomain加载这个老程序,让它继续执行部分的功能,当然后来整个程序改完后自然AppDomain也就不用了。最后,如果你是做教案,为了便于同学们理解,可以这样形象地比喻:AppDomain就是在Application这个大房间里再隔出一些小隔间,作用呢?有限!无非是给大家一些隐私的空间罢了。