我发现RichTextBox和RegEx的组合存在一个奇怪的问题。 如果我将文本文件加载到RichTextBox并使用
Dim matches As MatchCollection = Regex.Matches(RichTextBox1.Text, "^H(.+\t){10}\n", RegexOptions.Multiline Or RegexOptions.IgnoreCase)
然后RegEx将快速运行。
OTOH,如果我将文件中的文本直接加载到字符串中,并使用将此字符串与RegEx.Matches一起提供
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个字节(是字节顺序标记?)。但是,使用SubString修剪这4个字符并不能解决问题。 RichTextBox做了一些我不知道的其他处理。
我在客户端和服务器端都使用RegEx(客户端可以将文本文件加载到RichTextBox中以测试和设置各种RegEx,服务器将根据之前设置的RegEx处理文本文件)。毋庸置疑,正则表达式将在加载到RichTextBox中的文本文件上快速运行,而同一个RegEx运行在同一个文本文件中似乎会锁定服务器端服务。
我的问题:RichTextBox做了什么样的文本处理,我如何模仿服务器端进程中的行为?
感谢你提前给予的帮助。
最诚挚的问候, 丹尼尔
答案 0 :(得分:0)
猜猜:
为了测量时间,您是否计算从磁盘加载文件的时间?加载文件的时间可能比运行正则表达式的时间长。
也许它与Unicode有关?也许RichTextBox中字符串的表示在某种程度上比变量中的字符串更快?您可以使用BinaryFormatter将它们输出到字节列表并查看字节是否相同来测试它。