Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并行编程c#和运行时代码_C#_Multithreading_Performance_Parallel Processing - Fatal编程技术网

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

并行编程c#和运行时代码,c#,multithreading,performance,parallel-processing,C#,Multithreading,Performance,Parallel Processing,为了比较并行和串行计算模式下的运行时间,我将带有小写字符的单词转换为大写。对于并行模式,我运行两个线程并获取它的运行时间。 现在并行运行时间大于串行运行时间。 我的代码有什么问题 public void thread1() { for (int k = 0; k < Len; k = k + 2) { string sr1 =chars[k].ToString(); pchars[k] = s

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

    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);

    }



}
public void thread1()
{
对于(int k=0;k
这里有几点:首先,正如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或线程池。

简单地说:并行并不总是更快。创建和维护多个线程会带来一些开销(在较小规模的任务中尤其明显)。感谢您的关注。我在thread方法中更改代码并计算时间,现在并行运行时间比串行计算小。public void thread1(){time2=Stopwatch.StartNew();for(int k=0;k