簡體   English   中英

C#使用Task無法獲得性能提升嗎?

[英]C# No performance gain with Task?

我像下面一樣使用Task,但是沒有性能提升。 我檢查了我的方法,該方法在0-1秒內執行,但是使用Task(30 Tasks),需要5-12秒。 如果我做錯了任何人都可以指導。 我想並行運行30個,並希望在最多2秒內完成30個。

這是我的代碼:

Task[] tasks = new Task[30];
for (int p = 0; p <= dstable.Tables[0].Rows.Count - 1; p++)
{
    MethodParameters newParameter = new MethodParameters();
    newParameter.Name = dstable.Tables[0].Rows[p]["Name"].ToString();

    tasks[p] = Task.Factory.StartNew(() => ParseUri(newParameter));
    Application.DoEvents();
}
try
{
    Task.WaitAll(tasks);
    //Console.Write("task completed");
}
catch (AggregateException ae)
{
    throw ae.Flatten();
}

您的思考中存在一些主要問題。

  1. 您的PC是否具有30個內核,以便每個內核可以完全執行一項任務? 我不這么認為
  2. 啟動單獨的線程也需要一些時間。
  3. 每個並發線程都會產生更多開銷。
  4. 通過啟動更多線程可以更快地解決您的問題嗎? 只有當所有線程都執行不同的任務(例如從磁盤讀取,查詢數據庫,計算內容等)時,情況才如此。10個在CPU上執行所有“高性能”任務的線程不會提供任何幫助,完全相反,因為每個線程都需要清理混亂,才可以給下一個線程一些cpu時間,而那個線程也需要清理混亂。

檢查此鏈接http://msdn.microsoft.com/en-us/library/ms810437.aspx

您可以使用TPL http://msdn.microsoft.com/en-us/library/dd460717.aspx

他們試圖保證並行線程的最大效果。 我也推薦這本書http://www.amazon.com/The-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916

當您真的想在2秒內解決問題時,請購買更多的CPU電源;)

我認為您可能缺少使用線程的要點。

  • 創建許多線程可能會增加操作系統開銷,從而導致更高的復雜性。 (上下文切換)
  • 此外,管理代碼的執行將變得更加困難,並且如果存在錯誤,將更加難以發現和修復錯誤。

線程的使用可能會給您帶來好處

  • 任務需要同時執行
  • 構建響應式用戶界面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM