OutOfMemoryExceptionに正規表現マッチに加工した場合の大きなファイル
-
05-09-2019 - |
質問
私の例外をログからプロダクションコードでリリースなどで行っています。
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.
私の現地試験ではコンビニエンスストアです。見たことがありま類似の行動できるものの原因は?
私は分割のテキスト処理の前に、明らかにその場合には正規表現が一致しないが、元のファイルを割らせます。
私Regexes:
編集2:
この特定の正規表現の原因とな問題が試験での孤立した環境で食事のメモリーします。
((?:( |\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)( |\.|\.\.|""|'| ))?
編集
と決まっているとのこと間違っている私の地元のテストです。また、大きな文字列を追加ものである。NETフレームワーク連邦をはじめとして与OOM例外時の正規表現ではなく中の文字列操作(またはランダムなので、無視し、前もって).
これはa.NET Framework2.0願います。
解決
を見ることなくおRegexわかんないいものができにくいなどの問題がマッチして欲張りの代わりに踏む。
の正規表現エンジンをストーリーや、社内情報発信の欲張り試合ができ起こさの正規表現を大きくしのお800kの文字列は、多くの時間です。
がいくつかの良い情報はこの上 こちらの.
他のヒント
に基づく編集、そのようなコードが表示されている文字列を取る大量のメモリを消費します。この意味するとともに、メモリ不足の例外が発生から正規表現コードになるため、それらを実際に正規表現そのものが上がり過ぎてしまった。を使用している場合でも、StringBuilderに独自のコードがその問題を解決す、それはそれだけだ。
最初に私がうことが可能であれば、その用途は、分割までに入力します。
このファイルの読み込みの場合は入力ファイル)をラインを使用して、正規表現です。
するべきとの CLRプロファイラ.できるまでに少し時間の使い方を知り、その使い勝手は大きく変わります。作成しないようにしてください可視化するかをメモリに答えます。