Ваш метод на самом деле быстрее, чем предлагаемый String.Split
метод, почти в три раза быстрее на x86 и более чем в два раза быстрее на x64. Я подозреваю, что JIT портит ваши настройки времени, всегда запускайте ваши микробенчмарки дважды, так как JIT будет занимать подавляющее большинство времени во время вашего первого запуска. И поскольку String.Split
был NGEN'd, его не нужно компилировать в нативный код и, следовательно, он будет работать быстрее.
Не говоря уже о том, что он также более точен, String.Split
здесь будет насчитывать 7 слов:
test:: это тест
Также имеет смысл, String.Split
не выполняет никакой магии, и я был бы очень удивлен, если бы создание массива из множества строк было бы быстрее, чем простая итерация по отдельным символам в строке. Проповедь над строкой, по-видимому, была сильно оптимизирована, поскольку я попробовал unsafe
арифметику указателей, и на самом деле она была немного медленнее, чем простая foreach
. Я действительно сомневаюсь, что есть какой-то способ сделать это быстрее, кроме умения понять, какие разделы в вашем тексте нуждаются в подсчете слов.