プロダクションコードリリースの例外ログがあります。大容量ファイルの処理時にRegexのOutOfMemoryExceptionが発生する
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Text.RegularExpressions.Match..ctor(Regex regex, Int32 capcount, String text, Int32 begpos, Int32 len, Int32 startpos)
at System.Text.RegularExpressions.RegexRunner.InitMatch()
at System.Text.RegularExpressions.RegexRunner.Scan(Regex regex, String text, Int32 textbeg, Int32 textend, Int32 textstart, Int32 prevlen, Boolean quick)
at System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
at System.Text.RegularExpressions.MatchEnumerator.MoveNext()
処理しようとしたデータは約800KBでした。
私のローカルテストでは、正常に動作します。同じような動作を見たことがありますか?その原因は何ですか?
私はそれを処理する前にテキストを分割する必要がありますが、明らかにその場合正規のファイルがランダムな場所から分割されているため、正規表現が一致しないことがあります。
私の正規表現:
EDIT 2:
私はそれがすぐにメモリを食べている隔離された環境でそれをテストする場合、この特定の正規表現は、問題を引き起こしていると思います。
((?:(|\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)(|\.|\.\.|""|'|))?
EDIT
私は私の地元のテストで間違ってされていました。大きな文字列を読み込んで.NET Frameworkをめちゃくちゃにして、文字列操作中ではなくRegEx中にOOM例外を与えました(またはランダムに、前に述べたものを無視します)。
これは.NET Framework 2.0アプリケーションです。
正規表現を使用しているコードをリストできますか? – Seibar