У меня есть большая коллекция элементов. Я хочу вызвать ToString для каждого элемента и построить одну строку. Мой первый подход к медленномус использованием PLINQ или Parallel с сохранением первоначального заказа
string str = "";
list.ForEach(g => {
string s = g.ToString();
if(s != "")
str = str + g.ToString() + "\n";
});
Я попытался с помощью параллельного класса и PLINQ, как показано ниже, но тогда порядок элементов в конечной строке не было, как в оригинале.
Parallel
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";
});
Как я могу улучшить производительность и сохранить первоначальный заказ? Thanks
'AsOrdered()' только сохраняет заказ в отношении первоначального заказа. Так что, если заказ отличается от ForEach, тогда вам нужно его отсортировать. – Zache
Я не знаю, как сохранить порядок (или даже если это возможно), но вы должны использовать StringBuilder вместо конкатенации строк. – krimog
изменен на использование Stringbuilder без параллелизма, и он решил проблему. Спасибо всем – gerstla