中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-20 16:27:40 來源:網絡 閱讀:773 作者:leslies2 欄目:編程語言

引言

本文主要是介紹進程(Process)、應用程序域(AppDomain)、.NET上下文(Context)的概念與操作。
雖然在一般的開發當中這三者并不常用,但熟悉三者的關系,深入了解其作用,對提高系統的性能有莫大的幫助。
在本篇最后的一節當中將會介紹到三者與線程之間的關系,希望對多線程開發人員能提供一定的幫助。
因為時間倉促,文中有錯誤的地方敬請點評。

目錄

一、進程的概念與作用

二、應用程序域

三、深入了解.NET上下文

四、進程應用程序域與線程的關系

 

一、進程的概念與作用

進程(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類的詳細信息可以參考 http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.aspx
下面將舉例介紹一下Process的使用方式

 

1.2 建立與銷毀進程

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

         static void Main(string[] args)
         {
             Process process = Process.Start("notepad.exe","File.txt");
             Thread.Sleep(2000);
             process.Kill();
         }

 

1.3 列舉計算機運行中的進程

在表1.0 中可以看到,使用 GetProcesses 方法可以獲取本地計算機上正在運行的每一個進程列表。
而進程的 Id 屬性是每個進程的唯一標志,通過下面的方法,可以顯示當前計算機運行的所有進程信息。
因為篇幅關系,下面例子只獲取前10個進程。

 1         static void Main(string[] args)
 2         {
 3             var processList = Process.GetProcesses()
 4                 .OrderBy(x=>x.Id)
 5                 .Take(10);
 6             foreach (var process in processList)
 7                 Console.WriteLine(string.Format("ProcessId is:{0} \t ProcessName is:{1}",
 8                     process.Id, process.ProcessName));
 9             Console.ReadKey();
10         }

運行結果

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

 

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

         static void Main(string[] args)
         {
             try
             {
                 var process = Process.GetProcessById(1772);
                 Console.WriteLine("Process name is:" + process.ProcessName);
             }
             catch (ArgumentException ex)
             {
                 Console.WriteLine("Process is nothing!");
             }
             Console.ReadKey();
         }


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

注意:如果不能找到當前ID的進程,系統就會拋出ArgumentException異常。所以使用方法 GetProcessById 獲取進程時應該包含在 try{...} catch{..} 之內。

 

1.4 獲取進程中的多個模塊

在表1.0 中包含了Process類的Modules屬性,通過此屬性可能獲取進程中的多個模塊。
這些模塊可以是以 *.dll 結尾的程序集,也可以是 *.exe 結尾的可執行程序。
下面的例子就是通過 Process 的 GetCurrentProcess 方法獲取當前運行的進程信息,然后顯示當前進程的多個模塊信息。

1         static void Main(string[] args)
2         {
3             var moduleList = Process.GetCurrentProcess().Modules;
4             foreach (System.Diagnostics.ProcessModule module in moduleList)
5                 Console.WriteLine(string.Format("{0}\n  URL:{1}\n  Version:{2}",
6                     module.ModuleName,module.FileName,module.FileVersionInfo.FileVersion));
7             Console.ReadKey();
8         }

運行結果:

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

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿巴嘎旗| 大邑县| 杨浦区| 白朗县| 洛川县| 个旧市| 峨眉山市| 宜城市| 抚远县| 班玛县| 望城县| 鞍山市| 金川县| 法库县| 岑巩县| 鹿泉市| 华坪县| 格尔木市| 濉溪县| 陆良县| 若羌县| 闵行区| 微山县| 潜江市| 咸阳市| 庆阳市| 奇台县| 旅游| 东乡族自治县| 塔城市| 密云县| 综艺| 京山县| 晋江市| 满洲里市| 平罗县| 雅江县| 赣州市| 阿克苏市| 文登市| 宽甸|