有效测量多线程排序的执行时间

时间:2015-11-19 06:01:05

标签: c# multithreading thread-safety

我正在为我的C#类做一个任务,任务是使用多线程和单个线程对一组包含大约100万个条目的8个列表进行排序。我的单线程函数完全正常运行,平均执行时间约为750毫秒。

据我所知,多线程应该使这个过程运行得更快,但是我的执行平均执行时间大约为650毫秒。给出了示例执行时间(显然它们不会相同)但是多执行/单一的比率是6.因此我认为我的实现遇到了(可能的)问题。

我宣布我的初始主题:

Thread multiThreaded = new Thread(() => singleListSortWorker(data2));
        multiThreaded.Start();

所以这将调用

下面的singleListSortWorker函数
private void singleListSortWorker(List<List<int>> lists)
    {
        Stopwatch s = new Stopwatch();
        s.Start();

        List<Thread> threads = new List<Thread>();

        foreach(var list in lists)
        {
            Thread t = new Thread(() => doSortOnSingleList(list));
            threads.Add(t);
            t.Start();

        }
        foreach(var thread in threads)
        {
            thread.Join();
        }
        s.Stop();
        //SetTextBox2 is a thread safe function used to set the text in my field
        SetTextBox2("Multi-Threaded sort: " + s.Elapsed.Milliseconds + "ms." + System.Environment.NewLine);
    }

正如您所看到的,它为每个列表启动了一个具有以下功能的新线程:

private void doSortOnSingleList(List<int> list)
    {
        list.Sort();
    }

所以基本上我正在创建一个线程,为每个列表生成一个新线程,连接每个线程以确保正确测量执行然后完成。

我的实施是否存在问题,或者这是一种相对不错的方式吗?

0 个答案:

没有答案