一千萬個為什麽

搜索

在C#中使用多線程加速循環(問題)

想象一下,我有一個函數可以檢查一百萬個/十億個字符串,並檢查它們。

f.ex:

foreach (String item in ListOfStrings)
{
    result.add(CalculateSmth(item));
}

它耗費大量的時間,因為CalculateSmth是非常耗時的功能。

我想問一下:如何在這個過程中集成多線程?

f.ex: I want to fire-up 5 threads and each of them returns some results, and thats goes-on till the list has items.

也許任何人都可以展示一些例子或文章..

忘了提及我在.NET 2.0中需要它

最佳答案

並行擴展很酷,但這也可以通過像這樣使用線程池來完成:

using System.Collections.Generic;
using System.Threading;

namespace noocyte.Threading
{
    class CalcState
    {
        public CalcState(ManualResetEvent reset, string input) {
            Reset = reset;
            Input = input;
        }
        public ManualResetEvent Reset { get; private set; }
        public string Input { get; set; }
    }

    class CalculateMT
    {
        List result = new List();
        List events = new List();

        private void Calc() {
            List aList = new List();
            aList.Add("test");

            foreach (var item in aList)
            {
                CalcState cs = new CalcState(new ManualResetEvent(false), item);
                events.Add(cs.Reset);
                ThreadPool.QueueUserWorkItem(new WaitCallback(Calculate), cs);
            }
            WaitHandle.WaitAll(events.ToArray());
        }

        private void Calculate(object s)
        {
            CalcState cs = s as CalcState;
            cs.Reset.Set();
            result.Add(cs.Input);
        }
    }
}

轉載註明原文: 在C#中使用多線程加速循環(問題)