Ну, первое, что нужно отметить, это то, что вы не действительно выполняете большую часть запроса для ConcurrentDictionary
или всего, что с ним связано. Вы делаете это на копии значений, в списке.
Моим первым портом захода было бы выяснить, куда идет время - отделить вызов tradesDictionary.Values.ToList()
от остальной части запроса. Хотя через 4 минуты звучит way . После того, как вы определились, какая часть вызывает проблему, я бы рассмотрел использование непараллельного запроса только для сравнения.
Кроме того, это действительно зависит от того, что делают различные свойства записей. Они обращаются к базе данных или что-то в этом роде? Кажется, ваш компьютер простаивает в течение этих четырех минут или работает на полную мощность?
Меня поражает, что на самом деле не нужно для заказа всего набора - вам просто нужно найти минимальное значение. Однако, это должно принимать только сложность от O (n log n) до O (n), и это относительно сложно сделать в «нормальном» LINQ to Objects или Parallel LINQ.