Хороший!
Просто добавил
s.Start();
for (var i = 0; i < n; i++)
result = string.Concat(p.FirstName, " ", p.LastName);
s.Stop();
ceElapsedMilliseconds = s.ElapsedMilliseconds;
ceElapsedTicks = s.ElapsedTicks;
s.Reset();
, И это еще быстрее (я предполагаю строку. Concat называют в обоих примерах, но первый требует своего рода перевода).
1000000 x result = string.Format("{0} {1}", p.FirstName, p.LastName); took: 249ms - 3571621 ticks
1000000 x result = (p.FirstName + " " + p.LastName); took: 65ms - 944948 ticks
1000000 x result = string.Concat(p.FirstName, " ", p.LastName); took: 54ms - 780524 ticks
Как насчет использования функции раздела
, чтобы разбить последовательность диапазона
? Интересный пост о подобной проблеме был на http://www.fatvat.co.uk/2009/05/jvisualvm-and-clojure.html
Я бы посмотрел на библиотеку Fork / Join , настроенную для интеграции в JDK 7. Это легкая многопоточная модель, оптимизированная для неблокирующих вычислений по принципу «разделяй и властвуй». набор данных, использующий пул потоков, планировщик, упрощающий работу, и зеленые потоки.
Была проделана некоторая работа , чтобы обернуть API Fork / Join в ветку par , но это не так. t был объединен с основным ( еще ).