《精通C#》第十七章
进程简单的说就是一个正在运行的程序,包含了运行该程序所需要的一切资源以及内存分配。线程是进程的基本执行单元,在进程的入口点(类似main())创建的第一个线程称之为主线程。只有一个主线程的进程是线程安全的,因为一个程序中的数据只有一个线程在访问,但是只有一个线程的后果就是,如果实在执行一个复杂的操作时,因为运行的时间太长,对用户来说,就好像是请求没被响应一样。所以可以使用CreateThread()之类的Windows API函数另外产生次线程,每一个次线程都拥有与主线程一样的权限,线程之间相互独立,它们可以同时访问共享数据。拥有多线程会给我们带来一种大量的活动几乎在同一时间内完成,但是事实上,同时运行多个线程需要有多个CPU才行。因为实际上CPU将时间分成一个个的时间片(单位时间),按线程优先级分配时间片,当一个线程的时间片用完之后,它就会被挂起,执行下一个线程,由于时间片非常之短,计算机的运行速度有非常之快,故而导致一些操作看起来似乎是在同时发生响应。因而虽然多线程会相对的加快响应速度,但是线程过多的话性能反而会下降,因为CPU需要时间在线程之间进行转换。使用System.Diagnostics命名空间内定义的类,我们就可以使用编程的方式访问进程,
命名空间类名 | 作用 |
Process | 提供了访问本地进程和的远程进程的功能,允许通过编程方式开始或结束进程 |
ProcessModule | 代表一个加载到特定进程的模块(dll或者exe),它能代表任何模块(基于com、基于.Net或基于传统C的二进制程序) |
ProcessModuleCollection | 提供ProcessModule对象的强类型集合 |
ProcessStartInfo | 指点通过Process.Start方法启动进程是使用的一组值 |
ProcessThread | 代表指定进程中的线程。用于诊断一个进程的线程情况,并不用于在进程中创建线程 |
ProcessThreadCollection | 提供ProcessThread对象的强类型集合 |
其中Process是比较常用的一个类,它提供了用于启动、关闭进程,设定进程优先级,以及获得进程中活动线程的列表并且加载给定进程的模块,下图是有关Process的一部分关键属性:
属性 | 作用 |
ExitTime | 获取终止进程相关的时间戳 |
Handle | 返回操作系统分配给进程的句柄(由IntPtr表示)。当构建与非托管代码交互的.Net程序时,该属性很有用 |
Id | 获取关联的进程的ID |
MachineName | 获取关联进程运行的计算机名 |
MainWindowTitle | 获取进程主窗口的标题(如果没有住窗口,则返回空字符串) |
Modules | 可以访问强类型ProcessModuleCollection,后者表示一组加载到当前进程的模块(dll或者exe) |
ProcessName | 获取进程的名称(应用程序本身的名称) |
Responding | 指示进程的用户界面是否响应用户输入(或者当前是否被挂起) |
StartTime | 获取关联进程开始的时间 |
Thread |
获取运行在关联进程中的一组线程的设置(由ProcessThread对象的集合表示) |
以下则是该类的一些方法:
方法 | 作用 |
CloseMainWindow | 通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程 |
GetCurrentProcess | 这个静态方法返回新的Process对象以表示当前活动的进程 |
GetProcesses | 这个静态方法返回运行在给定计算机上的新的Process对象 |
Kill | 立即停止关联的进程 |
Start | 启动一个进程 |
在使用GetProcesses()方法返回一个Process对象组的时候,使用”.“符号即表示为本机,静态方法Process.GetProcessById通过关联的PID获取特定的进程,但是若是所指定的PID不存在,就会引发异常,还需要记住的是PID肯定不能为0,因为0是用来表示cpu空闲状态的。当使用Process.Modules属性访问ProcessModuleCollection时,可以列举出承载在进程中的所有模块:基于.Net、基于COM、基于传统C的库。还得说一下,模块这个词用于描绘承载于指定进程中的dll或者exe。在使用Kill方法结束进程的时候要注意该进程是否已经被结束,若是已经被结束了,再使用Kill()时,就会报错。
在.Net平台下,可执行程序会承载在一个进程的逻辑分区内,而非托管的程序是直接承载的,这个逻辑分区被命名为应用程序域,一个进程可以承载多个应用程序域,每个应用程序域之间都是相互隔离的,因此如果不使用分布式编程协议(如WCF),运行在某个应用程序域中的应用程序将无法访问其他应用程序中的任何数据,不论是全局的或是静态的。但是操作系统进程却只能承载默认的应用程序域。.NET平台运行我们使用System.AppDomain类,监控应用程序域、在运行时新建应用程序域、向新的应用程序域加载程序集等多种任务。
方法 | 作用 |
CreateDomain | 该静态方法在当前进程中创建一个新的应用程序域 |
CreateInstance | 在加载程序集到调用的应用程序域时,在外部程序集文件中创建指定类型的新实例 |
EXecuteAssembly | 根据文件名在应用程序中执行程序集 |
GetAssemblies | 获取已经加载到此应用程序域中的.Net程序集 |
GetCurrentThreadId | 该静态方法返回当前应用程序域上活动的线程Id |
Load | 动态加载程序集到当前的应用程序域 |
Unload | 该静态方法在进程中卸载指定的应用程序域 |
属性 | 作用 |
BaseDirectory | 获取目录路径,程序集解决程序用它来探测程序集 |
CurrentDomain | 该静态属性获取当前执行线程所在的应用程序域 |
FriendLyName | 获取当前应用程序域的友好名称 |
MonitoringIsEnable | 获取或设置一个值,该值指示是否对当前进程启用应用程序域的cpu和内存监控,一旦对进程启用了监控,则无法将其禁用 |
SetupInformation | 获取给定应用程序域的配置信息,表示为一个AppDomainSetup对象 |
事件 | 作用 |
AssemblyLoad | 在加载程序集到内存时发生 |
AssemblyResolve | 在对程序集的解析失败时发生 |
DomainUnload | 在即将从主进程中卸载AppDomain时发生 |
FirstChanceException | 在应用程序域抛出异常时,该事件将在CLR找到合适的catch语句之前触发 |
ProcessExit | 当默认应用程序的父进程退出时,在默认应用程序域上发生 |
UnhandledException | 在异常处理程序未捕捉到异常时 |
应用程序域再次分出上下文边界用于存放对象,见书本P525
http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html#c
《精通C#》第十七章的更多相关文章
- 进击的Python【第十七章】:jQuery的基本应用
进击的Python[第十七章]:jQuery的基本应用
- <构建之法>第十三章到十七章有感以及这个项目读后感
<构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记
第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...
- [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int 9 中断例程对键盘输入的处理 17.2 int 16 读取键盘缓存区 mov ah,0 int 16h 结果:(ah)=扫描码,(al) ...
- 第十七章——配置SQLServer(3)——配置“对即时负载的优化”
原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多 ...
- 第十七章——配置SQLServer(4)——优化SQLServer实例的配置
原文:第十七章--配置SQLServer(4)--优化SQLServer实例的配置 前言: Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServ ...
- 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
原文:第十七章--配置SQLServer(2)--32位和64位系统中的内存配置 前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE ...
- 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
原文:第十七章--配置SQLServer(1)--为SQLServer配置更多的处理器 前言: SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置.微软建 ...
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
随机推荐
- 题目描述: k一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768k 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,9 ...
- CSS3自定义滚动条样式 -webkit-scrollbar
今天写项目碰上需要改滚动条效果,我的第一反应是,需要用js写滚动条,顿时头大,上网搜了一下,原来css3就可以修改滚动条样式了,非常好啊,下面分享原文地址:http://www.xuanfengge. ...
- 亚马逊EC2弹性IP收费
刚收到亚马逊云账单,被扣了4.44刀,吓尿,麻溜的去查账单详情,发现之前弃用的美国实例有个弹性IP没释放掉,占着茅坑还不拉屎,被扣钱宝宝无话可说,赶紧释放... $0.005 per Elastic ...
- c# wpf定时器的一种用法
1.xaml页面 <Window x:Class="EssentialWPF.MainWindow" xmlns="http://schemas.microsoft ...
- 【状压DP】bzoj1087 互不侵犯king
一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...
- XFire完整入门教程
网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可 ...
- adnroid 监听软键盘的显隐
首先注明出处,我只是想做个笔记:http://www.jb51.net/article/64820.htm 第一眼看到的时候,觉得不太可靠,因为之前都是看到这样处理的,根据监听一个根布局的size,可 ...
- docker centos7 rabbitmq3.6.5
docker run --name=rabbitmqtmp -ti centos7/jdk7 /bin/bash yum -y install make gcc gcc-c++ kernel-deve ...
- 我的git学习
当遇到不想commit的,而status已经现实出来了,可以使用 git rm -r --cached "fine name or 文件夹" 出现 Git – fatal: U ...
- moq 的常用使用方法
测试方法 Console.WriteLine(mock.Object.GetCountThing()); 匹配参数 mock.Setup(x ...