zoukankan      html  css  js  c++  java
  • .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应用程序都按照它的虚拟根目录来标识。

  • 相关阅读:
    PHP保留小数的相关方法
    ASP.NET Core MVC 之过滤器(Filter)
    ASP.NET Core MVC 之控制器(Controller)
    ASP.NET Core MVC 之视图组件(View Component)
    ASP.NET Core MVC 之局部视图(Partial Views)
    标签助手(TagHelper)
    ASP.NET Core MVC 之布局(Layout)
    ASP.NET Core MVC 之视图(Views)
    ASP.NET Core MVC 之模型(Model)
    九卷读书:淘宝从小到大的发展 -重读《淘宝技术这十年》
  • 原文地址:https://www.cnblogs.com/jintianzhang/p/4280432.html
Copyright © 2011-2022 走看看