• .NET 应用程序域?



    为了提升windows系统的稳定性与可靠性,windows通过进程来实现。所有的可执行代码、数据以及其他资源都被包含在进程中,
    不允许其他进程对它进行访问(除非有足够的权限)。对于.NET应用程序,还进一步引入另一种隔离机制AppDomain。
    CLR加载的时候将创建三个AppDomain:系统应用程序域、共享应用程序域以及默认应用程序域。使用WinDbg.exe和!dumpdomain
    命令可以看到CLR创建的应用程序域如下:
    0:000> .loadby sos.dll clr
    0:000> !dumpdomain
    *********************************************************************
    * Symbols can not be loaded because symbol path is not initialized. *
    * *
    * The Symbol Path can be set by: *
    * using the _NT_SYMBOL_PATH environment variable. *
    * using the -y <symbol_path> argument when starting the debugger. *
    * using .sympath and .sympath+ *
    *********************************************************************
    PDB symbol for clr.dll not loaded
    --------------------------------------
    System Domain: 50820f60
    LowFrequencyHeap: 50821284
    HighFrequencyHeap: 508212cc
    StubHeap: 50821314
    Stage: OPEN
    Name: None
    --------------------------------------
    Shared Domain: 50820c08
    LowFrequencyHeap: 50821284
    HighFrequencyHeap: 508212cc
    StubHeap: 50821314
    Stage: OPEN
    Name: None
    Assembly: 00726b38 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]
    ClassLoader: 0072a3b8
    Module Name
    79571000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll

    --------------------------------------
    Domain 1: 006d7000
    LowFrequencyHeap: 006d7454
    HighFrequencyHeap: 006d749c
    StubHeap: 006d74e4
    Stage: OPEN
    Name: CApp.exe
    Assembly: 00726b38 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]
    ClassLoader: 0072a3b8
    SecurityDescriptor: 00726aa0
    Module Name
    =79571000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll

    在进程中有三个应用程序域:System、Shared、Domain 1。这个三个程序域的主要作用:
    1、系统应用程序员
    1)创建其他两个应用程序域(共享应用程序域和默认应用程序域)
    2)将mscorlib.dll加载到共享应用程序域中
    3)记录进程中所有其他的应用程序域,包括提供加载/卸载应用程序域等功能
    4)记录字符串池中的字符串常量,因此允许任意字符串在每个进程中都存在一个副本。
    5)初始化特定类型的异常,例如内存耗尽异常等
    2、共享应用程序域
    在共享应用程序域中包含与应用程序域无关的代码。mscorlib.dll将被加载到应用程序域中,
    此外还包含在System命名空间中的一些基本类型。

    3、默认应用程序域
    .NET程序在默认应用程序域中运行。位于默认应用程序域中的所有代码都只有在这个域才是有效的。
    任何跨域应用程序域的访问操作都必须通过.NET远程对象来进行。

    宿主如何使用AppDomain?
    1、可执行应用程序
    控制台UI应用程序、NT Service应用程序、windows窗体应用程序和 WPF应用程序都是自寄宿应用程序的例子。
    它们都有托管EXE文件。
    2、ASP.NET web窗体和web应用程序
    ASP.NET作为一个ISAPI DLL(ASPNet_ISAPI.dll)实现。客户端首次请求一个由ASP.NET ISAPI DLL处理的URL时,
    ASP.NET会加载CLR。客户端请求一个web应用程序时,ASP.NET判断这是不是第一次请求。
    如果是,ASP.NET会告诉CLR为该WEB应用程序创建一个新的AppDomain。每个web应用程序都按照它的虚拟根目录来标识。

  • 相关阅读:
    c++中的extern
    DOS性能监视器
    谈谈.NET中的内存管理(转帖)
    static_cast和dynamic_cast
    关于对EventHandler 和e的理解(转帖)
    使用Windows Mobile 6模拟器上网的步骤(转帖)
    接口抽象类类
    当前不会命中断点 尚未加载指定的模块 windows mobile
    C# 编码的双重检验锁定
    Loadrunner 监控Unix系统性能指标的解释
  • 原文地址:https://www.cnblogs.com/jintianzhang/p/4280432.html
Copyright © 2020-2023  润新知