Nas*_*ghi 2 c# multithreading loops visual-studio-2015
我是C#多线程的新手.我已经定义了一个简单的for循环,当我按下一个按钮时,它从0开始计数到10000并使用秒表我捕获了完成这个循环所需的时间.
private void button2_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (double i = 0; i < 5000; i++)
{
Console.WriteLine(i.ToString() + ", ");
}
sw.Stop();
TimeSpan ts = sw.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
MessageBox.Show(elapsedTime);
}
Run Code Online (Sandbox Code Playgroud)
在我的笔记本电脑上需要:15':28''
另一方面,我尝试多线程以了解我是否可以缩短这个时间.我做的是:
1)定义5个函数(Func1,Func2,....,Func5)
2)在每个函数内部,我定义了一个for循环,它计算main for循环的五分之一:
Func1:0 - 1000
Func2:1000 - 2000
Func3:2000 - 3000
Func4:3000 - 4000
Func5:4000 - 4000
3)最后,我定义了五个不同的线程,并在每个线程中调用每个函数.
从逻辑上讲,我希望在更短的时间内得到结果,但运行时间与没有线程的时间相同.
private void button1_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Thread T1 = new Thread(new ThreadStart(Func1));
T1.Start();
Thread T2 = new Thread(new ThreadStart(Func2));
T2.Start();
Thread T3 = new Thread(new ThreadStart(Func3));
T3.Start();
Thread T4 = new Thread(new ThreadStart(Func4));
T4.Start();
Thread T5 = new Thread(new ThreadStart(Func5));
T5.Start();
T1.Join();
T2.Join();
T3.Join();
T4.Join();
T5.Join();
sw.Stop();
TimeSpan ts = sw.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
MessageBox.Show(elapsedTime);
}
Run Code Online (Sandbox Code Playgroud)
我可以使用线程缩短运行时间吗?如果有,怎么样?如果不是,我应该使用什么方法?
我测试了这段代码以查看C#线程的功能,它可能看起来没用,但我会在图像处理应用程序中使用它来缩短几个for循环的运行时间.
请帮忙.
你有一个餐厅.你只有一个厨师做得很好,但他的速度很慢.你有一个服务员接受所有订单并将其交给厨师.这太慢了,客户开始抱怨.
你有一个好主意(或不是).你雇佣了100名服务员,这应该会让事情变得更快!好吧,现在你已经获得了更快地送到厨师的订单,但是食物仍以同样的速度出现.怎么可能?
改变烹调的Console.WriteLine和服务员的Threads并且那基本上就是你正在尝试做的.你看它是多么无意义?
现在,如果你有10个厨师(加工商)和只有一个服务员(线程),那么完全不同的故事就是这样.在这种情况下,雇用9名服务员将非常有意义.
故事的道德启示?当您要执行处理器绑定任务时,使用更多线程并并行化,并且您有处理器闲置等待.否则,通常有更好的方法来处理无用的线程.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |