对于并行和串行计算模式下的比较运行时间,我将带小写字符的单词转换为大写。对于并行模式,我运行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);
}
}
答案 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或线程池。