我正在使用C#.net在Rhino3D的一个名为Grasshopper的软件包中,尝试优化一些数学运算。该操作非常简单,但是需要执行该操作的列表很大,并且可能会变得更大。
我在我的C#脚本中使用Parallel.ForEach和列表,但是我得到的最终结果数量比预期的要少。这很可能是因为list.add不是线程安全的(或者说它不是在我正在构建它的软件中线程安全的)。
private void RunScript(double z, int x, List<double> y, ref object A)
{
List<double> temp = new List<double>();
double r;
System.Threading.Tasks.Parallel.ForEach(y, numb =>
{
r = Math.Pow((numb * x), z);
temp.Add(r);
});
A = temp;
请帮助我找到一种简单高效的方法,使用CPU多线程(或者如果您有关于GPU CUDA的建议)在几百个值上运行这个简单的数学运算。
我希望这个晦涩而具体的软件不会打扰你,因为据我所知,它与普通的C#.Net/Python/VB.Net表现相同。
ConcurrentBag
代替List
,它是线程安全的:MSDN - Thaoden