【发布时间】:2014-01-23 09:19:31
【问题描述】:
我有大量元素。我想为每个元素调用 ToString 并构建一个字符串。 我的第一个方法是放慢速度
string str = "";
list.ForEach( g => {
string s = g.ToString();
if(s != "")
str = str + g.ToString() + "\n";
});
我尝试使用 Parallel 类和 PLINQ,如下所示,但最终字符串中元素的顺序与原始字符串不同。
平行
System.Threading.Tasks.Parallel.ForEach(list, g => {
string s = g.ToString();
if(s != "")
str = str + g.ToString() + "\n";
});
PLINQ
string str = "";
list.AsParallel().AsOrdered().ForAll( g => {
string s = g.ToString();
if(s != "")
str = str + g.ToString() + "\n";
});
如何提高性能并保持原始顺序? 谢谢
【问题讨论】:
-
AsOrdered()仅保留原始订单的订单。因此,如果在 ForEach 之后的顺序不同,那么您需要在之后对其进行排序。 -
我不知道如何保持顺序(或者即使可能),但您应该使用 StringBuilder 而不是连接字符串。
-
改为使用没有并行的Stringbuilder,它解决了问题。谢谢大家
标签: c# parallel-processing plinq