程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 高定位高效率程序中 線程與線程池比較

C# 高定位高效率程序中 線程與線程池比較

編輯:C#入門知識

應用程序可以擁有多個線程,當程序需要大量時間來處理部分業務或流程時,就可以通過線程來操作,如果應用程序沒有用到線程,那將會出現很麻煩的事情,例如:界面上有個dataGridView需要填充數據,如果有Form_Load事件中實現數據綁定,如果在主線程中操作,那麼你運行打開窗體的時候就會出現程序假死的現象.這不是客戶所接受的,所以在程序開發中,線程的應用是不可缺少的一部分.

我們用多線程來開發程序,目的就是減少處理器單元的閒置時間,增加處理器單元的操作能力.但這並不能說明在程序中可以泛用多線程,應用不當,會降低系統的性能.例如:如果完成一個作業需要的時間為N,在多線程的情況下,創建線程需要的時間為N0,線程中處理的作業需要的時間為N1,線程銷毀需要的時間是N3,還有一些其它的時間這裡就不算了,這裡可以看出如果作業流程簡單的,占用資源和時間不長的則不需要利用一個線程來處理,如果一個作業需要不停的創建線程則需要利用到線程池,從而提高程序的性能.

需要多線程作業,需要添加System.Threading命名空間,下面細說一個Thread的操作:

通過Thread一次使用一個線程,來創建和刪除線程.
創建線程: 
Thread th = new Thread(new ThreadStart(Method));
開始線程:
th.Start();
銷毀線程:
th.Abort();
線程名稱:
th.Name="A";
線程休眠:
th.Sleep();
線程掛起:
th.Suspend();
線程恢復:
th.Resume();
說到Thread還有一個方法就是設置後台線程
IsBackground屬性設為true,該線程即為後台線程。
後台線程跟前台線程只有一個區別,那就是後台線程不妨礙程序的終止。一旦一個進程所有的前台線程都終止後,
CLR將通過調用任意一個存活中的後台進程的Abort()方法來徹底終止進程。注意:後台線程不能直接操作所在進程
之外的數據引用。

 

通過ThreadPool來創建線程,如果你的程序需要頻繁的創建線程的時候你就可以用到這個類,用實現創建線程,提高程
序的性能.通過ThreadPool.QueueUserWorkItem(new WaitCallback(Method), 1)來創建線程池下面請看一下面的代碼:
private void button2_Click(object sender, EventArgs e)
{
    int maxTh, minTh, portTh;  

    ThreadPool.GetMaxThreads(out maxTh, out portTh);
    ThreadPool.GetMinThreads(out minTh, out portTh);
    richTextBox1.Text = maxTh.ToString() + " , " + minTh.ToString() + " , " + portTh.ToString() + " ";

    ThreadPool.QueueUserWorkItem(new WaitCallback(A1), 1);
    ThreadPool.QueueUserWorkItem(new WaitCallback(A2), 1);
}

private void A1(object i)
{
    string str = i.ToString();
    if (this.InvokeRequired)
    {
updateRichTxt ur = new updateRichTxt(UpdateRT);
this.Invoke(ur, str);
    }
}
private void A2(object i)
{
    string str = ((int)i + 1).ToString();
    if (this.InvokeRequired)
    {
updateRichTxt ur = new updateRichTxt(UpdateRT);
this.Invoke(ur, str);
    }
}

private delegate void updateRichTxt(string iTxt);

private void UpdateRT(string iTxt)
{
    richTextBox1.Text = richTextBox1.Text + iTxt + " ";
}
到這裡你應該清楚,多線程的正確應用。

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved