C#中的process/AppDomain/Object Context

来源:互联网 发布:快剪用什么软件好 编辑:程序博客网 时间:2024/05/29 14:28

1  System.Diagnostics namespace下的Process相关的类

 

Process  - 提供远程和本地process的入口,并支持开启/关闭process

ProcessModule    -  表示一个已经加载到process的module(exe或者dll),支持任何com based/.net/传统c的文件

ProcessModuleCollection  - 强类型的processModule的collection

ProcessStartInfo  -  提供用于process.start的参数

ProcessThread  -   进程中的一个线程,只是返回已有线程而不会新建线程

ProcessThreadCollection  强类型processThread的collection

 

2  AppDomain

 

一个Process对应多个AppDomain,一个AppDomain对应一个可执行程序。

 

AppDomain的优点

 

1 是中间层概念,所以加强了系统平台独立性

2 AppDomain相对与Process,是轻量级的。使CLR容易加载和卸载

3 AppDomain之间是完全独立的,一个Process中,如果一个AppDomain失败,不影响其他的AppDomain

 

3  创建AppDomain

 

创建新的AppDomain后,只有mscorlib.dll会被加载进该Domain。 如

public class ConsoleApplication1

{

    public static void main(string[] args)

{

   AppDomain ad = AppDomain.CreateDomain("ConsoleApplication2");

   ad.Load("ClassLibrary1")

}

}

上例中process ConsoleApplication1会有2个AppDomain,一个是Default, 包含mscorlib.dll,system.windows.form.dll,consoleapplication1.exe等,另一个为ConsoleApplication2 ,则只有mscorlib.dll和classlibrary1.dll

 

 

3 属性[Synchronization]和类ContextBoundObject

process中有多个appdomain

appdomain中有多个context.

 

一般对象实例话的时候,如果调用Thread.CurrentContext.ContextId,得到返回值为0,即默认context.

但是如果使用了[synchronization]和contextboundobject,则对象实例话后,得到返回值为一个唯一值,如1,2递增。

 

如果使用了synchronization和contextboundobject声明的对象,表明该类是线程安全的,不支持垃圾回收。