并行编程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