製品コード リリースの 1 つから例外ログを取得しました。
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 でした。
私のローカルテストでは、完全に正常に動作します。同様の動作を見たことがありますか?原因は何でしょうか?
処理する前にテキストを分割しますが、明らかにその場合、元のファイルがランダムな場所から分割されるため、正規表現が一致しない可能性があります。
私の正規表現:
編集2:
この特定の RegEx が問題を引き起こしていると思います。隔離された環境でテストすると、すぐにメモリが消費されます。
((?:( |\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)( |\.|\.\.|""|'| ))?
編集
私はローカルテストで間違っていました。私は大きな文字列を読み込んで、.NET Framework がめまいがするようなものを追加して、文字列操作中ではなく RegEx 中に OOM 例外を発生させていました (またはランダムに、私が言った前のものを無視してください)。
これは .NET Framework 2.0 アプリケーションです。