2016-09-25 4 views
0

Regex.Matches()への呼び出し回数を含むテキスト処理内部ループで、メモリ割り当ての数を最小限に抑える必要があります。したがって、文字の長さ(文字単位)t、正規表現パターンの長さ(文字単位)はr、一致数はm、メモリ割り当てのおおよその数はRegex.Matches()となります。これらの配分?これらはRegexオプションのいずれかの影響を受けていますか?Regex.Matches()は内部でどのくらいの割り当てをしていますか?

私はsource codeRegexとそれに関連するクラスを試してみましたが、その複雑さに悩まされています。 Regex.Matches()のメモリ使用量に関するWeb上の多くのドキュメントも見つかりませんでした。したがって、疑問。

+0

正規表現はFSMのようなものなので、それを格納するのに必要なメモリ(たぶんハッシュテーブル?)とバックトラックのための余分なスペースより多くのスペースを占めるべきではありません。それは設定と実際の正規表現の影響を受けます(正規表現の長さはそれとは無関係で、その複雑さや特定の機能の使い方があります)。マッチ回数は問題ではありません。まだプロファイリングを試したことがありますか? – MarZab

+0

私はすでにコンセプトを理解しています。実装はその問題についてです。 – bright

答えて

1

JetBrains dotMemoryのようなメモリプロファイラーを取得し、正規表現を使用して単純なアプリケーションをプロファイリングし、Regex.Matchesやその他の方法で作成したmemory trafficを見てください。これは、割り当ての数を知る最も単純で正確な方法ですRegex.Matches()。 Visual Studioに埋め込まれたメモリプロファイラは、メモリトラフィック、AFAIK、その他の商用プロファイラで情報を表示しません。

関連する問題