我正在尝试创建一个基本上重要的应用程序(并沿途学习C#)。越快越好。
这就是我最初考虑多线程的原因。但是,正如我所看到的那样,这是不可能的,因为多线程的重点是同时并行运行代码,对吗?
那么,我可以使用多个线程吗?或者任何使它增加更快的一般提示?
谢谢。
答案 0 :(得分:4)
您必须对数字范围进行分区。例如,不是在一个线程中从0递增到999'999,而是让四个线程从0增加到249'999,从250'000到499'999,从500'000到749'999以及从750'000增加到999 '分别是999。
看看Task Parallelism (Task Parallel Library)。
不要让错误创建一百万个递增一次的任务!多任务开销实际上会大大减慢这个过程。如果每项任务都必须执行大量工作,那么实际上只能提高速度。
答案 1 :(得分:1)
为了获得最佳性能,对于单个变量的简单递增,我会使用经常被忽略的Interlocked类。
private long SingleVariable = 0;
public void MultiThreadedMethod()
{
Interlocked.Increment(SingleVariable);
}
虽然在这个简单的例子中,多线程没有明显的好处,但是我认为缓存(缓存一致性网络)带宽是这种情况下的瓶颈。
但是,这样的模式在多线程世界中通常很有用,其中多个线程可能正在完成工作单元,然后递增中央计数器以跟踪线程的总进度。互锁的替代方法是使用Monitor.Enter(或C#中的lock关键字),这会相对较慢。