天天看點

細說程序、應用程式域與上下文之間的關系(一)——程序的概念與作用

引言

<a></a>

本文主要是介紹程序(Process)、應用程式域(AppDomain)、.NET上下文(Context)的概念與操作。

雖然在一般的開發當中這三者并不常用,但熟悉三者的關系,深入了解其作用,對提高系統的性能有莫大的幫助。

在本篇最後的一節當中将會介紹到三者與線程之間的關系,希望對多線程開發人員能提供一定的幫助。

因為時間倉促,文中有錯誤的地方敬請點評。

目錄

<a href="http://79100812.blog.51cto.com/2689556/836719" target="_blank">一、程序的概念與作用</a>

<a href="http://79100812.blog.51cto.com/2689556/836724" target="_blank">二、應用程式域</a>

<a href="http://79100812.blog.51cto.com/2689556/836728" target="_blank">三、深入了解.NET上下文</a>

<a href="http://79100812.blog.51cto.com/2689556/836740" target="_blank">四、程序應用程式域與線程的關系</a>

一、程序的概念與作用

程序(Process)是Windows系統中的一個基本概念,它包含着一個運作程式所需要的資源。程序之間是相對獨立的,一個程序無法直接通路另 一個程序的資料(除非利用分布式計算方式),一個程序運作的失敗也不會影響其他程序的運作,Windows系統就是利用程序把工作劃分為多個獨立的區域 的。程序可以了解為一個程式的基本邊界。

1.1 Process 的屬性與方法

在 System.Diagnostics 命名空間當中存在Process類,專門用于管理程序的開始、結束,通路程序中的子產品,擷取程序中的線程,設定程序的優先級别等。

表1.0 顯示了Process類的常用屬性:

屬性

說明

BasePriority

擷取關聯程序的基本優先級。

ExitCode

擷取關聯程序終止時指定的值。

ExitTime

擷取關聯程序退出的時間。

Handle

傳回關聯程序的本機句柄。

HandleCount

擷取由程序打開的句柄數。

HasExited

擷取訓示關聯程序是否已終止的值。

Id

擷取關聯程序的唯一辨別符。

MachineName

擷取關聯程序正在其上運作的計算機的名稱。

MainModule

擷取關聯程序的主子產品。

Modules

擷取已由關聯程序加載的子產品。

PriorityClass

擷取或設定關聯程序的總體優先級類别。

ProcessName

擷取該程序的名稱。

StartInfo

擷取或設定要傳遞給Process的Start方法的屬性。

StartTime

擷取關聯程序啟動的時間。

SynchronizingObject

擷取或設定用于封送由于程序退出事件而發出的事件處理程式調用的對象。

Threads

擷取在關聯程序中運作的一組線程

 表1.0

除了上述屬性,Process類也定義了下列經常使用的方法:

方法

GetProcessById

建立新的 Process 元件,并将其與您指定的現有程序資源關聯。

GetProcessByName

建立多個新的 Process 元件,并将其與您指定的現有程序資源關聯。

GetCurrentProcess

擷取新的 Process 元件并将其與目前活動的程序關聯。

GetProcesses

擷取本地計算機上正在運作的每一個程序清單。

Start

啟動一個程序。

Kill

立即停止關聯的程序。

Close

釋放與此元件關聯的所有資源。

WaitForExit

訓示 Process 元件無限期地等待關聯程序退出。

 表1.1

下面将舉例介紹一下Process的使用方式

1.2 建立與銷毀程序

利用 Start 與Kill 方法可以簡單建立或者銷毀程序,下面例子就是利用 Start 方法啟動記事本的程序,并打開File.txt檔案。2秒鐘以後,再使用 Kill 方法銷毀程序,并關閉記事本。

1.3 列舉計算機運作中的程序

在表1.0 中可以看到,使用 GetProcesses 方法可以擷取本地計算機上正在運作的每一個程序清單。

而程序的 Id 屬性是每個程序的唯一标志,通過下面的方法,可以顯示目前計算機運作的所有程序資訊。

因為篇幅關系,下面例子隻擷取前10個程序。

運作結果

<a href="http://blog.51cto.com/attachment/201204/160336231.jpg" target="_blank"></a>

如果已知程序的Id,就可以通過 GetProcessById 方法擷取對應的程序。

同樣地,你也可能通過GetProcessByName方法擷取多個對應名稱的程序。

注意:如果不能找到目前ID的程序,系統就會抛出ArgumentException異常。是以使用方法 GetProcessById 擷取程序時應該包含在 try{...} catch{..} 之内。

1.4 擷取程序中的多個子產品

在表1.0 中包含了Process類的Modules屬性,通過此屬性可能擷取程序中的多個子產品。

這些子產品可以是以 *.dll 結尾的程式集,也可以是 *.exe 結尾的可執行程式。

下面的例子就是通過 Process 的 GetCurrentProcess 方法擷取目前運作的程序資訊,然後顯示目前程序的多個子產品資訊。

運作結果:

<a href="http://blog.51cto.com/attachment/201204/160354719.jpg" target="_blank"></a>

本文轉自 leslies2  51CTO部落格,原文連結:http://blog.51cto.com/79100812/836719

繼續閱讀