1

我正在尝试制作一个基本上很重要的应用程序(并在此过程中学习 C#)。越快越好。

这就是为什么最初我在考虑多线程的原因。但是,在我看来,这是不可能的,因为多线程的全部意义在于同时并行运行代码,对吧?

那么,我可以使用多个线程吗?或者有什么一般提示可以让它更快地增加?

谢谢你。

4

2 回答 2

4

您必须划分数字范围。例如,不是在一个线程中从 0 递增到 999'999,而是让四个线程从 0 递增到 249'999、从 250'000 到 499'999、从 500'000 到 749'999 以及从 750'000 到 999 '999 分别。

并看看Task Parallelism (Task Parallel Library)

不要犯错误来创建增加一次的一百万个任务!多任务处理的开销实际上会大大减慢这个过程。如果每项任务都必须执行大量工作,您实际上只能提高速度。

于 2012-12-26T00:21:44.027 回答
1

为了获得最佳性能,对于单个变量的简单递增,我会使用经常被忽视的Interlocked类。

private long SingleVariable = 0;
public void MultiThreadedMethod()
{
   Interlocked.Increment(SingleVariable);
}

尽管在这个简单的示例中,多线程不会带来明显的好处,但性能方面是明智的,因为我预计缓存(缓存一致性网络)带宽会成为这种情况下的瓶颈。

然而,这种模式在多线程世界中通常很有用,其中多个线程可能正在完成一个工作单元,然后增加一个中央计数器以跟踪线程的总进度。互锁的替代方法是使用 Monitor.Enter(或 C# 中的 lock 关键字),这会相对较慢。

于 2012-12-26T01:11:41.613 回答