Вы можете значительно повысить производительность, читая текстовый файл по одной строке за раз вместо создания огромной строки.
Можно звонить
File.ReadLines(path).SelectMany(s => s.Split(' '))
Не звонить ReadAllLines
;потребуется построить огромный массив.
Ваш первый Select
вызов совершенно бесполезен.
Ваш Contains
вызов будет зацикленчерез весь словарь для каждого слова в файле.
Таким образом, вызов Where
является операцией O (n 2 ).
Измените keywords
на HashSet<string>
.
Поскольку HashSets можно искать в постоянное время, вызов Where
станет операцией O (n), что намного лучше.
Ваш второй вызов Select
может бытьв сочетании с GroupBy
, который сократит большое количество объектов:
.GroupBy(c => c, (word, set) => new { word, count = set.Count() })
Словари неупорядоченно неупорядочены, поэтому ваш вызов OrderBy
- бесполезная трата времени.