Вы можете использовать полученные советы (например, использовать StringBuilder), а с параллельными расширениями - сколько ядер у вас есть на вашем компьютере для параллельной работы.
Посмотрите на этот код:
class Program {
static void Main(String[] args) {
// Filling the data
List<KeyValuePair<String, String>> map = new List<KeyValuePair<String, String>>();
List<StringBuilder> strings = new List<StringBuilder>();
List<StringBuilder> strings2 = new List<StringBuilder>();
for (Int32 i = 0; i < 50; i++) {
String key = String.Format("[KEY{0}]", i);
String value = String.Format("Text of KEY{0}", i);
KeyValuePair<String, String> keyValuePair = new KeyValuePair<String, String>(key, value);
map.Add(keyValuePair);
}
for (Int32 i = 0; i < 1024; i++) {
StringBuilder text = new StringBuilder();
foreach (KeyValuePair<String, String> keyValuePair in map) {
text.AppendFormat("Some text before - {0} - Some text after.", keyValuePair.Key);
text.AppendLine();
}
strings.Add(text);
strings2.Add(text);
}
// Measuring the normal loop
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
foreach (StringBuilder text in strings) {
foreach (KeyValuePair<String, String> eachMap in map) {
text.Replace(eachMap.Key, eachMap.Value);
}
}
stopwatch.Stop();
Console.WriteLine("Time with normal loop: {0}", stopwatch.Elapsed);
// Measuring the parallel loop
stopwatch.Reset();
stopwatch.Start();
Parallel.ForEach(strings2, text => {
foreach (KeyValuePair<String, String> eachMap in map) {
text.Replace(eachMap.Key, eachMap.Value);
}
});
stopwatch.Stop();
Console.WriteLine("Time with parallel: {0}", stopwatch.Elapsed);
Console.ReadLine();
}
}
И посмотрите на некоторые меры, выполняемые на моем ноутбуке (AMD Turion64 X2 - 2 ядра):
Время с нормальной петлей: 00: 00: 03.5956428
Время с параллелью: 00: 00: 01.8707367
Время с нормальным циклом: 00: 00: 02.1467821
Время с параллелью: 00: 00: 01.4627365
Время с нормальной петлей: 00: 00: 03.4123084
Время с параллелью: 00: 00: 01.6704408
Надеюсь, это поможет.
Рикардо Ласерда Каштелу-Бранку