2010-07-03 114 views
0

我需要計算執行每個線程所用的時間。 所以我用這個代碼來做到這一點。線程上的一些概念問題

Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 

stopWatch.Stop(); 
TimeSpan ts = stopWatch.Elapsed; 

string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds); 
Console.WriteLine(elapsedTime, "RunTime"); 

現在我的每個線程執行的方法的工作(),這是怎麼一回事呢:

void work(){ 
    Stopwatch stopWatch = new Stopwatch(); 
    stopWatch.Start(); 

    //codes,,, 

    stopWatch.Stop(); 

    TimeSpan ts = stopWatch.Elapsed; 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds); 
    Console.WriteLine(elapsedTime, "RunTime"); 
} 

所以現在我的問題是,我需要創造1000個秒錶對象或不是因爲數組說1000個工作()方法正在同時運行。

回答

2

您的代碼會正常工作,假設每個調用都是在不同的線程上完成的,因爲您要爲每個線程創建一個新的對象StopWatch

也就是說,每個StopWatch不是一個共享資源,所以不同的線程不應該干擾其他線程StopWatch的對象。

+0

好的..非常感謝 – phen 2010-07-03 08:24:52

1

如果每個work()方法都在它自己的線程中產生,那麼是的。

在附註中,除非擁有一個非常大的服務器場,否則您可能不應該實例化1000個線程。

+1

服務器場如何提供幫助?線程仍然是本地的進程... – 2010-07-03 08:01:14

+0

好吧..非常感謝 – phen 2010-07-03 08:22:16

0

您的stopWatch變量是本地work方法中的變量。這意味着你每次都會有一個自變量work被稱爲...... heck,你甚至可以在work(在同一個線程中)調用work並獲得獨立的StopWatch實例和stopWatch變量。

+0

好吧..非常感謝 – phen 2010-07-03 08:21:40

1

請注意,秒錶測量「掛鐘時間」,即在StartStop之間的「現實生活」中通過的時間。當有多個線程同時運行時,時間將包括線程未執行但必須等待CPU內核可用的時間。

GetThreadTimes可以測量在一個線程中花費的時間,但它也不完美:它具有非常粗的粒度(10..15ms),這使得它不適合小規模的性能測量,並且給出了不正確的結果早期自願放棄量子的線程。