Regex 如果未从RichTextBox读取文本,则正则表达式速度会减慢

Regex 如果未从RichTextBox读取文本,则正则表达式速度会减慢,regex,vb.net,richtextbox,Regex,Vb.net,Richtextbox,我发现RichTextBox和RegEx的组合存在一个奇怪的问题。 如果我将文本文件加载到RichTextBox并使用 Dim matches As MatchCollection = Regex.Matches(RichTextBox1.Text, "^H(.+\t){10}\n", RegexOptions.Multiline Or RegexOptions.IgnoreCase) 然后正则表达式将以极快的速度运行。 如果我直接将文件中的文本加载到字符串中,并使用 Dim FullText

我发现RichTextBox和RegEx的组合存在一个奇怪的问题。 如果我将文本文件加载到RichTextBox并使用

Dim matches As MatchCollection = Regex.Matches(RichTextBox1.Text, "^H(.+\t){10}\n", RegexOptions.Multiline Or RegexOptions.IgnoreCase)
然后正则表达式将以极快的速度运行。 如果我直接将文件中的文本加载到字符串中,并使用

Dim FullText As String = New StreamReader("c:\Temp\TextFile.txt", System.Text.Encoding.UTF8, True).ReadToEnd
Dim matches As MatchCollection = Regex.Matches(FullText, "^H(.+\t){10}\n", RegexOptions.Multiline Or RegexOptions.IgnoreCase)
然后正则表达式将运行很长时间

现在很明显RichTextBox对文本做了一些修改。我发现将文本加载到RichTextBox将消除文本的前4个字节(这是字节顺序标记吗?)。但是,用子字符串修剪这4个字符并不能解决问题。RichTextBox会进行一些我不知道的其他处理

我在客户端和服务器端都使用正则表达式(客户端可以将文本文件加载到RichTextBox中,以测试和设置各种正则表达式,服务器将根据以前设置的正则表达式处理文本文件)。不用说,正则表达式将在加载到RichTextBox的文本文件上快速运行,而同样的正则表达式在同样的文本文件中运行似乎会锁定服务器端服务

我的问题是:RichTextBox做什么样的文本处理?如何在服务器端进程中模拟这种行为

提前谢谢你的帮助

致以最良好的祝愿, 丹尼尔

猜猜看:

  • 为了测量时间,您是否在计算从磁盘加载文件的时间?加载文件的时间可能比运行正则表达式的时间长

  • 也许它与Unicode有关?也许RichTextBox中字符串的表示形式比变量中的表示形式处理起来更快?您可以通过使用BinaryFormatter将每个字节输出到一个字节列表来测试它,并查看这些字节是否相同


  • 谢谢你的回复。我在调试器中逐步完成代码。所讨论的文本文件是1800字节,因此加载不需要时间。调试器立即跳到下一行。但是,在读取MatchCollection.Count(即实际处理正则表达式的时间)时,大约需要3-4分钟。因此,差别相当明显。我来看看BinaryFormatter。结果是RichTextBox将\r\n转换为\n。在字符串上进行转换后,一切正常。