并行编程代码c#和运行时间

时间:2016-11-30 18:14:19

标签: c# multithreading performance parallel-processing

对于并行和串行计算模式下的比较运行时间,我将带小写字符的单词转换为大写。对于并行模式,我运行2个线程并获得运行时间。 现在并行运行时间大于串行运行时间。 我的代码有什么问题???

    public void thread1()
    {

        for (int k = 0; k < Len; k = k + 2)
        {
            string sr1 =chars[k].ToString();
            pchars[k] = sr1.ToUpper();
        }
    }
    public void thread2()
    {
        for (int q = 1; q < Len; q = q + 2)
        {
            string sr2 = chars[q].ToString();
            pchars[q] = sr2.ToUpper();
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {   
        read_array();
        var time2 = Stopwatch.StartNew();
        Thread t1 = new Thread(new ThreadStart(thread1));
        Thread t2 = new Thread(new ThreadStart(thread2));
        t1.Start();
        t2.Start();
        time2.Stop();
        lbl1.Text = (time2.Elapsed.TotalMilliseconds).ToString("ms");
        Thread.Sleep(1);

    }



}

1 个答案:

答案 0 :(得分:1)

这里有几点:首先,正如DangerZone在评论中指出的那样,添加线程有一些开销,所以你需要确保你在线程上做的任何事情实际上是CPU密集型的,足以证明开销的合理性。线程。在这种情况下,它看起来不是。

其次,以下测试完全无效:

    var time2 = Stopwatch.StartNew();
    Thread t1 = new Thread(new ThreadStart(thread1));
    Thread t2 = new Thread(new ThreadStart(thread2));
    t1.Start();
    t2.Start();
    time2.Stop();

这里你实际测量的是创建和启动线程需要多长时间,而不是完成线程实际运行的任务实际需要多长时间。

第三,对于这种“一次性”任务,你只需做一次然后扔掉它,你可能想要使用Task.Run或线程池。