日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

windows查询每个线程占用的内存_C#多线程

發布時間:2025/3/15 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows查询每个线程占用的内存_C#多线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基本概念

1、進程

首先打開任務管理器,查看當前運行的進程:

從任務管理器里面可以看到當前所有正在運行的進程。那么究竟什么是進程呢?

進程(Process)是Windows系統中的一個基本概念,它包含著一個運行程序所需要的資源。一個正在運行的應用程序在操作系統中被視為一個進程,進程可以包括一個或多個線程。線程是操作系統分配處理器時間的基本單元,在進程中可以有多個線程同時執行代碼。進程之間是相對獨立的,一個進程無法訪問另一個進程的數據(除非利用分布式計算方式),一個進程運行的失敗也不會影響其他進程的運行,Windows系統就是利用進程把工作劃分為多個獨立的區域的。進程可以理解為一個程序的基本邊界。是應用程序的一個運行例程,是應用程序的一次動態執行過程。

二、線程

在任務管理器里面查詢當前總共運行的線程數:

線程(Thread)是進程中的基本執行單元,是操作系統分配CPU時間的基本單位,一個進程可以包含若干個線程,在進程入口執行的第一個線程被視為這個進程的主線程。在.NET應用程序中,都是以Main()方法作為入口的,當調用此方法時系統就會自動創建一個主線程。線程主要是由CPU寄存器、調用棧和線程本地存儲器(Thread Local Storage,TLS)組成的。CPU寄存器主要記錄當前所執行線程的狀態,調用棧主要用于維護線程所調用到的內存與數據,TLS主要用于存放線程的狀態信息。

二、多線程

多線程的優點:可以同時完成多個任務;可以使程序的響應速度更快;可以讓占用大量處理時間的任務或當前沒有進行處理的任務定期將處理時間讓給別的任務;可以隨時停止任務;可以設置每個任務的優先級以優化程序性能。

那么可能有人會問:為什么可以多線程執行呢?總結起來有下面兩方面的原因:

1、CPU運行速度太快,硬件處理速度跟不上,所以操作系統進行分時間片管理。這樣,從宏觀角度來說是多線程并發的,因為CPU速度太快,察覺不到,看起來是同一時刻執行了不同的操作。但是從微觀角度來講,同一時刻只能有一個線程在處理。

2、目前電腦都是多核多CPU的,一個CPU在同一時刻只能運行一個線程,但是多個CPU在同一時刻就可以運行多個線程。

然而,多線程雖然有很多優點,但是也必須認識到多線程可能存在影響系統性能的不利方面,才能正確使用線程。不利方面主要有如下幾點:

(1)線程也是程序,所以線程需要占用內存,線程越多,占用內存也越多。

(2)多線程需要協調和管理,所以需要占用CPU時間以便跟蹤線程。

(3)線程之間對共享資源的訪問會相互影響,必須解決爭用共享資源的問題。

(4)線程太多會導致控制太復雜,最終可能造成很多程序缺陷。

當啟動一個可執行程序時,將創建一個主線程。在默認的情況下,C#程序具有一個線程,此線程執行程序中以Main方法開始和結束的代碼,Main()方法直接或間接執行的每一個命令都有默認線程(主線程)執行,當Main()方法返回時此線程也將終止。

一個進程可以創建一個或多個線程以執行與該進程關聯的部分程序代碼。在C#中,線程是使用Thread類處理的,該類在System.Threading命名空間中。使用Thread類創建線程時,只需要提供線程入口,線程入口告訴程序讓這個線程做什么。通過實例化一個Thread類的對象就可以創建一個線程。創建新的Thread對象時,將創建新的托管線程。Thread類接收一個ThreadStart委托或ParameterizedThreadStart委托的構造函數,該委托包裝了調用Start方法時由新線程調用的方法,示例代碼如下:

Thread thread=new Thread(new ThreadStart(method));//創建線程

thread.Start(); //啟動線程

上面代碼實例化了一個Thread對象,并指明將要調用的方法method(),然后啟動線程。ThreadStart委托中作為參數的方法不需要參數,并且沒有返回值。ParameterizedThreadStart委托一個對象作為參數,利用這個參數可以很方便地向線程傳遞參數,示例代碼如下:

Thread thread=new Thread(new ParameterizedThreadStart(method));//創建線程

thread.Start(3); //啟動線程

創建多線程的步驟:
1、編寫線程所要執行的方法
2、實例化Thread類,并傳入一個指向線程所要執行方法的委托。(這時線程已經產生,但還沒有運行)
3、調用Thread實例的Start方法,標記該線程可以被CPU執行了,但具體執行時間由CPU決定

2.1 System.Threading.Thread類

Thread類是是控制線程的基礎類,位于System.Threading命名空間下,具有4個重載的構造函數:

ThreadStart是一個無參的、返回值為void的委托。委托定義如下:

public delegate void ThreadStart()

通過ThreadStart委托創建并運行一個線程:

運行結果

除了可以運行靜態的方法,還可以運行實例方法

運行結果:

如果為了簡單,也可以通過匿名委托或Lambda表達式來為Thread的構造方法賦值

運行結果:

ParameterizedThreadStart是一個有參的、返回值為void的委托,定義如下:

public delegate void ParameterizedThreadStart(Object obj)

注意:ParameterizedThreadStart委托的參數類型必須是Object的。如果使用的是不帶參數的委托,不能使用帶參數的Start方法運行線程,否則系統會拋出異常。但使用帶參數的委托,可以使用thread.Start()來運行線程,這時所傳遞的參數值為null。

本文轉載自博客園:https://www.cnblogs.com/dotnet261010/p/6159984.html

總結

以上是生活随笔為你收集整理的windows查询每个线程占用的内存_C#多线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。