[英]High CPU usage in C# multi-threaded code
我沒有編寫好的多線程代碼的知識。 我剛開始在需要的項目上工作。 我已經編寫了以下代碼,它可以按我的意願工作,但是,CPU使用率很高。 我假設這是由於我如何使用線程。 如果有人指出以下代碼中的缺陷並讓我知道如何修復它,以使CPU使用率不高,我將不勝感激。
var numberOfMinutes = Convert.ToInt32(ConfigurationManager.AppSettings["NumberOfMinutesToRun"]);
var traversals = DbLayer.GetTraversals().ToList();
var numberOfThreads = Convert.ToInt32(ConfigurationManager.AppSettings["NumberOfThreads"]);
var threads = new List<Thread>(numberOfThreads);
var counter = 1;
var s = new Stopwatch();
s.Start();
var sync = new object();
while (s.Elapsed < TimeSpan.FromMinutes(numberOfMinutes))
{
for (var i = 0; i < (numberOfThreads - threads.Count); i++)
{
var counter1 = counter; // due to closure.
var traversal = traversals.FirstOrDefault(t => t.Id == counter1);
var threadStart = new ThreadStart(new CallHelper(traversal).Migrate);
var i1 = i;
threadStart += () =>
{
threads.RemoveAt(i1);
};
threads.Insert(i, new Thread(threadStart) {IsBackground = true});
threads[i].Start();
lock (sync)
{
counter++;
if (counter > 6)
{
counter = 1;
}
}
}
}
s.Stop();
我更新了代碼,以顯示希望得到的幫助。 遍歷集合僅包含6個項目。 計數器在那里,以確保線程遍歷遍歷集合中的6個項目中的每一個。 CallHelper類僅在每次遍歷上執行一個運行時間很長的任務。 該應用程序旨在使用可配置數量的線程在可配置的時間內對6個不同的對象執行長期運行的任務。 希望我已經填補了足夠的空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.