2011-08-22 3 views
0

RichTextBox와 RegEx의 조합에 이상한 문제가 있습니다. 는 내가하여 RichTextBox에 텍스트 파일을로드 한 후 정규식이 타오르는 빠른 실행RichTextBox에서 텍스트를 읽지 못하는 경우 RegEx가 느려집니다.

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) 

를 사용하여 RegEx.Matches이 문자열을 공급하는 경우 OTOH.

이제 분명히 RichTextBox가 텍스트를 처리합니다. RichTextBox에 텍스트를로드하면 텍스트의 처음 4 바이트가 제거된다는 것을 알았습니다 (바이트 순서 표시입니까?). 그러나 이러한 4자를 SubString으로 트리밍해도 문제가 해결되지 않습니다. RichTextBox는 내가 모르는 다른 처리를 수행합니다.

저는 클라이언트와 서버 쪽 모두에서 RegEx를 사용하고 있습니다 (클라이언트는 텍스트 파일을 RichTextBox에로드하여 다양한 RegEx를 테스트하고 설정할 수 있으며 이전에 설정 한 RegEx에 따라 텍스트 파일을 처리합니다). 물론 동일한 정규식이 동일한 텍스트 파일을 통해 실행되는 동안 RichTextBox로로드 된 텍스트 파일에서 정규식이 빠르게 실행된다는 것은 말할 필요도없이 서버 측 서비스를 잠그는 것 같습니다.

내 질문 : RichTextBox는 어떤 종류의 텍스트 처리를 수행하며 어떻게 서버 측 프로세스의 동작을 모방 할 수 있습니까?

미리 도움을 주셔서 감사합니다.

최고 감사합니다, 다니엘

답변

0

그냥 추측 :

시간을 측정
  1. , 당신은 디스크에서 파일을로드하는 시간을 계산하는? 파일을로드하는 시간은 정규식 실행 시간보다 길 수도 있습니다.

  2. 아마도 유니 코드와 관련이 있습니까? 어쩌면 RichTextBox의 문자열 표현이 변수의 처리보다 처리 속도가 더 빠릅니까? BinaryFormatter를 사용하여 각각을 바이트 목록으로 출력하고 바이트가 같은지 확인하여 테스트 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 디버거의 코드를 단계별로 설명합니다. 문제의 텍스트 파일은 1800 바이트이므로로드하는 데 시간이 필요하지 않습니다. 디버거는 즉시 다음 행으로 이동합니다. 그러나 MatchCollection.Count (정규식이 실제로 처리되는 시간)를 읽을 때 약 3-4 분이 소요됩니다. 그래서 그 차이는 꽤 뚜렷합니다. BinaryFormatter를 살펴 보겠습니다. – Daniel

+1

RichTextBox는 \ r \ n을 \ n으로 변환합니다. 문자열에 대한 변환을 수행하면 모두 정상입니다. – Daniel

관련 문제