C# 使用cpu的两个核心
我想在for循环中进行一些计算:C# 使用cpu的两个核心,c#,windows,multithreading,programming-languages,C#,Windows,Multithreading,Programming Languages,我想在for循环中进行一些计算: for (int i=0; i< Math.Pow(10,8) ;i++){ //do some computation } 但当我运行时,它只使用我的一个cpu核心,我在任务管理器中看到我的程序使用了50%的cpu 如何使用这两个核心?它需要穿线吗 如果它需要多线程,我不能中断循环,因为它会填充数组并将其用作索引增量,那么如果需要线程,那么解决方案是什么呢 例如,在下面的代码中,我按增量填充数组p,并动态使用该数组 void f(){/*do so
for (int i=0; i< Math.Pow(10,8) ;i++){
//do some computation
}
但当我运行时,它只使用我的一个cpu核心,我在任务管理器中看到我的程序使用了50%的cpu
如何使用这两个核心?它需要穿线吗
如果它需要多线程,我不能中断循环,因为它会填充数组并将其用作索引增量,那么如果需要线程,那么解决方案是什么呢
例如,在下面的代码中,我按增量填充数组p,并动态使用该数组
void f(){/*do some computation*/}
double[] P;
for (int i=0; i< Math.Pow(10,8) ;i++){
if (some conditions with index i and f and array P occurs )
P[i]=f;
}
我的笔记本电脑是intel core 2 dou 2.2 GH
它需要穿线吗
是的。
您可以使用来自TPL的并行for循环:
Parallel.For(0, (int)Math.Pow(10, 8),
i =>
{
// do some computation
});
当然,如果数组中每个项目的值都可以与其他项目分开计算,则此解决方案是适用的。请查看:
你可以在网上找到大量的例子。你能发布检查p内容的具体条件吗?假设我的算法是用来查找素数的,每次当我%p[j]找到素数时=到目前为止,所有j的0都保存在P[j+1]中。我知道素数测试有更好的算法。如果我理解正确,你不能并行计算。要查找素数,你绝对可以使用下面丹尼斯建议的并行for循环。为了进一步改进,我建议阅读它可能会给你一些提示。