巨大なファイルの読み取りをうまく処理する C# プログラムを作成する必要があります。
たとえば、60 MB 以上のファイルがあります。そのすべてを scintilla ボックスに読み込んで、sci_log と呼びましょう。このプログラムは、この機能とその他の機能で約 200 MB のメモリを使用しています。これでも問題ありません (このファイルを開くために Notepad++ が使用するメモリ量よりも少ない)。
別のシンティラ ボックス、sci_splice があります。ユーザーが検索語を入力すると、プログラムはファイル (またはファイルの長さが十分に小さい場合は sci_log です。両方の方法で発生するため問題ではありません) を検索して、regexp.match を見つけます。一致が見つかると、その行を以前に一致した文字列と連結し、一時的なカウント変数を増やします。count が 100 (または 150、または 200、実際には任意の数) の場合、出力を sci_splice に入れ、GC.Collect() を呼び出し、次の 100 行に対して繰り返します (count = 0 を設定し、文字列を null にします)。
自宅のラップトップからこれを書いているので、今はコードを持っていませんが、これに関する問題は、大量のメモリを使用していることです。200MB のメモリ使用量は 1GB をはるかに超え、終わりが見えません。これは、多くの正規表現が一致する検索でのみ発生するため、文字列に関連するものです。しかし問題は、GC がそのメモリを解放しないかどうかです。また、なぜこんなに高くなるのですか?なぜ 3 倍以上になるのか意味がありません (最悪の場合)。その 200mB のすべてがメモリ内のログに過ぎなかったとしても、実行しているのは各行を読み取って保存することだけです (最悪の場合)。
さらにテストを重ねた結果、Scintilla が行を追加する際に大量のメモリを使用することに何か問題があるようです。行の最初の読み取りでは、一瞬で最大 850mB のメモリ スパイクが発生します。出力をページングするだけでよいと思います。