gpt4 book ai didi

c# - 如何将一个 for 循环分成多个循环并使用线程运行它们以缩短运行时间?

转载 作者:行者123 更新时间:2023-11-30 19:53:37 25 4
gpt4 key购买 nike

我是 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);
}

On my laptop it takes: 15':28''

另一方面,我尝试了多线程以查看是否可以缩短这个时间。我所做的是:

1) 定义5个函数(Func1,Func2, ...., Func5)

2) 在每个函数中,我定义了一个 for 循环,它占主 for 循环的五分之一:

函数 1:0 - 1000

函数 2:1000 - 2000

函数 3:2000 - 3000

函数 4:3000 - 4000

函数 5: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);
}

我可以使用线程缩短运行时间吗?如果是,如何?如果不是,我应该使用什么方法?

我测试了这段代码以了解 C# 线程的功能,它可能看起来没用,但我会在图像处理应用程序中使用它来缩短几个 for 循环的运行时间。

请帮忙。

最佳答案

您有一家餐厅。你只有一个厨师做得很好,但他太慢了。您有一位服务员接受所有订单并将其交给厨师。这太慢了,客户开始提示。

你有一个好主意(或没有)。你雇了 100 名服务员,这应该会让事情变得更快!好吧,现在你的订单以更快的速度送到厨师手中,但食物仍然以同样的速度出来。这怎么可能?

Console.WriteLine 更改 cook 并为 Threads 更改 waiters ,这基本上就是您要尝试做的.你知道这是多么毫无意义吗?

现在,如果您有 10 个厨师(处理器)而只有一个服务员(线程),情况就会完全不同。在这种情况下,再雇用 9 个服务员就很合理了。

故事的寓意?当您有处理器绑定(bind)任务要执行并且处理器空闲等待时,使用更多线程和并行化。否则,通常有比启动无用线程更好的方法。

关于c# - 如何将一个 for 循环分成多个循环并使用线程运行它们以缩短运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47727701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com