AppDomain卸载与代理】的更多相关文章

AppDomain卸载与代理 涉及内容: 反射与MEF解决方案 AppDomain卸载与代理 WinForm.WcfRestService示 插件系统的基本目的是实现宿主与组件的隔离,核心是作为接驳约定的接口,宿主使用类型发现及挂载插件,以下是反射实现. 创建类库项目Plugin,添加接口IPlugin:   创建控制台程序HostApp,添加对Plugin项目的引用,Main方法代码: 创建类库项目MyPlugin1,添加对Plugin项目的引用,添加Plugin1类并实现IPlugin: 修…
前一篇文章简单展示了类型发现和MEF使用,本文初步进入AppDomain相关内容. CLR程序运行时会创建默认程序集容器即AppDomain,默认AppDomain不支持卸载其程序集,但CLR支持创建和卸载AppDomain,这意味着我们可以间接地通过额外的AppDomain实现插件的热插拔. 代理AppDomain创建PluginProvider实例,该实例及其发现的IPlugin的实现需要被被默认AppDomain访问,于是发生了跨AppDomain边界的访问,PluginProvider及…
涉及内容: 反射与MEF解决方案 AppDomain卸载与代理 WinForm.WcfRestService示 PRRT1: 反射实现 插件系统的基本目的是实现宿主与组件的隔离,核心是作为接驳约定的接口,宿主使用类型发现及挂载插件,以下是反射实现. 创建类库项目Plugin,添加接口IPlugin: public interface IPlugin { String DoStuff(); } 创建控制台程序HostApp,添加对Plugin项目的引用,Main方法代码: class Progra…
应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线程,会抛线程终止的异常. 百度查到把线程执行代码放到finally块中 AppDomain很出色的一个能力就是它允许卸载.卸载AppDomain会导致CLR卸载AppDomain中的所有程序集,还会释放AppDomain的Loader堆.为了卸载一个AppDomain,可以调用AppDomain的静…
什么是AppDomain? 我们都知道windows进程,它起到应用程序隔离的作用,带来的好处是,当某个进程发生错误的时候,不会影响其他的进程,系统也不会受到影响.但是,创建windows进程的代价是很大的..net推出AppDomain的作用也是隔离,如果能确保应用程序都是安全代码(managed code),那么appdomain其实就可以起到进程的作用.每个appdomain里有自己的堆,负责自己内部对象的创建和销毁,对象一般不能夸appdomain访问. 当应用程序启动,CLR加载后,会…
CLR COM服务器初始化时,会创建一个AppDomain.AppDomain是一组程序集的逻辑容器.CLR初始化时创建的第一个AppDomain称为默认的AppDomain,这个默认的AppDomain只有在Windonws进程终止时才能被撤销. 除了默认的AppDomain,正在使用非托管Com接口方法或托管类型方法的一个宿主还可指示CLR创建额外的AppDomain,AppDomain唯一的作用就是进程隔离.下面总结了AppDomain的具体功能. 1.1.   一个AppDomain中的…
http://www.blogcn.com/user8/flier_lu/index.html?id=2164751&run=.04005F8 CLR 产品单元经理(Unit Manager) Jason Zander 在前几天一篇文章 Why isn't there an Assembly.Unload method? 中解释了为什么 CLR 中目前没有实现类似 Win32 API 中 UnloadLibrary 函数功能的 Assembly.Unload 方法.    他认为之所以要实现 A…
AppDomain 类 表示应用程序域,它是一个应用程序在其中执行的独立环境. 此类不能被继承. 命名空间:   System程序集:  mscorlib(位于 mscorlib.dll) 继承层次结构  System.Object  System.MarshalByRefObject    System.AppDomain [ClassInterfaceAttribute(ClassInterfaceType.None)] [ComVisibleAttribute(true)] public…
一.CLR寄宿 .net framework在windows平台的顶部允许.者意味着.net framework必须用windows能理解的技术来构建.所有托管模块和程序集文件必须使用windows PE文件格式,而且要么是windows exe文件,要么是DLL文件 1,MSCorEE.dll(垫片)①CLRCreateInstance函数在MSCorEE.dll文件中实现.“垫片”的工作是决定创建哪个版本的CLR(1.0.2.0.3.0的CLR代码在MSCorWks.dll文件中:版本4则在…
22.1 CLR寄宿 CLR Hosting(CLR 宿主)的概念:初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只不过由于PE文件中引入了CLR Header,OS进程加载了mscoree.dll,从而启动了CLR.CLR本身不是一个可执行程序,它需要一个进程来装载并启动它,从而接管进程并创建自身的程序运行上下文,这个过程可称之为CLR Hosting.从本质上来讲,CLR是一个COM服务器,它自身封装了一系列…
进程     进程是操作系统用于隔离众多正在运行的应用程序的机制.在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存.进程不能直接访问物理内存,操作系统通过其它的处理把这些虚拟内存映射到物理内存或IO设备的某个区域,而这些物理内存之间不会有重叠,这就决定了一个进程不可能访问分配给另一个进程的内存.相应地,运行在该进程中的应用程序也不可能写入另一个应用程序的内存,这确保了任何执行出错的代码不会损害其地址空间以外的应用程序.在这种机制下,进程作为应用程序之间一个独立而安…
寄宿(hosting)使任何应用程序都能利用clr的功能.特别要指出的是,它使现有应用程序至少能部分使用托管代码编写.另外,寄宿还为应用程序提供了通过编程来进行自定义和扩展的能力. 允许可扩展性意味着第三方代码可在你的进程中运行.在windows中将第三方dll加载到进程中意味着冒险.dll中的代码很容易破坏应用程序的数据结构和代码.dll还可能企图利用应用程序的安全上下文来访问它本来无权访问的资源.clr的appDomain功能解决了所有这些问题.AppDomain允许第三方.不受信任的代码在…
1 clr寄宿-----.net framework在windows平台的顶部允许.者意味着.net framework必须用windows能理解的技术来构建.所有托管模块和程序集文件必须使用windows PE文件格式,而且要么是windows exe文件,要么是DLL文件 2,ICLRRuntimeHost可以做以下事情①设置宿主管理器.该诉CLR宿主想参与与涉及以下操作的决策:内存分配.线程调度/同步以及程序集加载等.宿主还可声明它想获得有关垃圾回收启动和停止以及特定操作超时的通知②获取C…
使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级的进程.一个应用程序域可以有多个线程,一个线程也可以穿梭于多个应用程序域. 在一个进程中可以包含多个应用程序域,一个应用程序域可以装在一个可执行程序(*.exe)或者多个程序集(*.dll).这样可以使应用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作…
1.控制面板中-添加或删除程序中-删除"McAfee VirusScan Enterprise"和"McAfee AntiSpyware Enterprise Module" 2.控制面板中-管理工具-服务-停止MCAFEE FRAMEWORK MANAGER服务 3.开始中—运行—输入cmd—输入"C:\Program Files\McAfee\Common Framework\frminst.exe" /forceuninstall (注意包…
首先,描述一下AppDomain是什么:当一个程序集被执行时,系统就会自动为其创建一个AppDomain,每一个AppDomain属于某个进程,一个进程内可以有多个AppDomain:每个AppDomain创建时都有个默认的名称,该名称就是加载的程序集的名称(带扩展名.exe).同一windows 进程内的不同AppDomian之间可以互相共享资源,如:CLR,基本.NET类型,地址空间及线程.程序集在AppDomain中的调用:在同一进程内,如果不同的AppDomain调用同一Assembly…
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助.因为时间仓促,文中有错误的地方敬请点评. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Proces…
工作几年了才看,记录下笔记备忘. 章节 笔记 1.CLR的执行模型 公共语言运行时(Common Language Runtime,CLR) 源代码-->编译器检查语法和分析源代码-->托管模块(manged module)(含IL代码)-->运行时有JIT编译器生成cpu指令执行 托管模块由PE32|PE32+(64位).CLR头.元数据.IL代码(中间语言运行时转换成CPU指令) 组成 COM组件是一种规范,实现规范的DLL也可称为COM组件 . 托管模块中的元数据描述了模块中定义了…
原文转载链接:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html Written by:风尘浪子 引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助. 在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 因为时…
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助.因为时间仓促,文中有错误的地方敬请点评. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Proces…
Contents 第1章CLR的执行模型... 4 1.1将源代码编译成托管代码模块... 4 1.2 将托管模块合并成程序集... 6 1.3加载公共语言运行时... 7 1.4执行程序集的代码... 8 1.5本地代码生成器:NGen.exe. 11 1.6 Framework类库... 11 1.7通用数据类型... 12 1.8公共语言规范... 12 第2章 生成.打包.部署和管理应用程序及类型... 13 2.1 .Net Framework部署目标... 13 2.2将类型生成到模…
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助.因为时间仓促,文中有错误的地方敬请点评. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Proces…
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助. 在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Process)是Windows系统中的一个基本…
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方式运行w3wp进程.这个可以通过查看IIS Application Pool 的高级选项进行设置: 好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程. 1. 加载 WinDbg SOS 扩展命令 .load C:\Windows\Microsoft.NET\Fram…
托管 vs. 原生线程 托管代码在“托管线程”上执行,(托管线程)与操作系统提供的原生线程不同.原生线程是在物理机器上执行的原生代码序列:而托管线程则是在CLR虚拟机上执行的虚拟线程. 正如JIT解释器将“虚拟的”中间(IL)指令映射到物理机器上的原声指令,CLR线程基础架构将“虚拟的”托管线程映射到操作系统的原生线程上. 在任意时刻,一个托管线程可能会也可能不会被分配到一个原生线程执行.例如,一个已经被创建(通过“new System.Threading.Thread”)但是未启动(通过“Sy…
第一章 准备 1.1.    环境配置 _NT_DEBUGGER_EXTENSION_PATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 _NT_SYMBOL_PATH=SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols Path add: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 C:\Program Files\Debugging…
托管堆基础 一般创建一个对象就是通过调用IL指令newobj分配内存,然后初始化内存,也就是实例构造器时做这个事. 然后在使用完对象后,摧毁资源的状态以进行清理,然后由垃圾回收器来释放内存. 托管堆除了能避免错误使用已经被释放的内存,也会减少内存泄漏,大多数类型都无需资源清理,垃圾回收器会自动释放资源. 当然也有需要立即清理的,比如一些包含了本机资源的类型(如文件.套接字和数据库连接等),可在这些类中调用一个Dispose方法.(当然有的类对这个方法封装了一下,可能是别的名字比如断开数据库连接的…
每个应用程序都要使用这样或者那样的资源,比如文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可供程序使用的一种资源. 要使用这些资源,必须为代表资源的类型分配内存.   访问一个资源所需的具体步骤如下: #1,调用IL指令newobj, 为代表资源的类型分配内存.C#中使用new操作符,编译器就会自动生成该指令. #2,初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态. #3,访问类型的成员(可根据需要反复)来使用资源.…
好书不能只读一遍,这两天又翻看了一遍<你必须知道的.NET>,重温了下基础,重温了下经典,简单记录了下来. 内存分配:CLR 管理内存的区域,主要有三块,分别为: 线程的堆栈,用于分配值类型实例.堆栈主要由操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放.栈的执行效率高,但存储容量有限. GC 堆,用于分配小对象实例.如果引用类型对象的实例大小小于 85000 字节,实例将被分配在 GC 堆上,当有内存分配或者回收时,垃圾收集器可能会对 GC 堆进行压缩,详…
sccm有一些比较重要的日志大家可能经常需要查看.下面是一些比较常用的日志文件的存放位置. 客户端日志文件: 日志位于服务器端 SMS_CCM\Logs 文件夹中 日志位于客户端 %Windir%\System32\CCM\Logs 文件夹 站点服务器日志文件: 位于服务器端 <安装路径>\Logs 文件夹中 管理点日志文件.网络访问保护日志文件.操作系统部署日志文件.软件更新站点服务器日志文件.所需的配置管理日志文件: 都位于服务器端SMS_CCM\LOGS 文件夹中 软件更新站点服务器日志…