计算richtextbox中所有单词的最有效方法是什么?

Jus*_*tin 2 c# wpf performance richtextbox word-count

我正在写一个文本编辑器,需要提供一个实时字数.现在我正在使用这个扩展方法:

 public static int WordCount(this string s)
    {
        s = s.TrimEnd();
        if (String.IsNullOrEmpty(s)) return 0;
        int count = 0;
        bool lastWasWordChar = false;
        foreach (char c in s)
        {
            if (Char.IsLetterOrDigit(c) || c == '_' || c == '\'' || c == '-')
            {
                lastWasWordChar = true;
                continue;
            }
            if (lastWasWordChar)
            {
                lastWasWordChar = false;
                count++;
            }
        }
        if (!lastWasWordChar) count--;
        return count + 1;
    }
Run Code Online (Sandbox Code Playgroud)

我设置它使得单词count在每十分之一秒运行在richtextbox的文本上(如果选择开始不同于上次方法运行时).问题是当处理很长的文件时,字数会变慢.为了解决这个问题,我正在考虑只在当前段落上运行单词count,每次记录单词计数,并将其与上次单词计数运行时的单词计数进行比较.然后它会将两者之间的差异添加到总字数中.这样做会导致许多复杂情况(如果用户粘贴,如果用户删除了一个段落,等等.)这是一种合理的方法来改善我的字数吗?或者有哪些我不知道哪些会让它变得更好?

编辑:它可以在不同的线程上运行字数吗?我不太了解线程,会研究.

我使用的示例文本:

Nic*_*ver 11

您可以根据空白区域进行更简单的字数统计:

public static int WordCount(this string s)
{
  return s.Split(new char[] {' '}, 
    StringSplitOptions.RemoveEmptyEntries).Length;
}
Run Code Online (Sandbox Code Playgroud)

MSDN提供了这个示例,应该可以在大文件上更快地为您提供准确的字数.