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提供了这个示例,应该可以在大文件上更快地为您提供准确的字数.