現在、FlowDocument リソースの解放に関する問題に対処しようとしています。rtf ファイルを読み込んで、TextRange.Load で FlowDocument に入れています。これを行った後、それらのリソースを保持し、GC はそれを収集しないことに気付きました。メモリ プロファイラを実行したところ、これが正しいことがわかりました。また、実際にロードして rtf を FlowDocument に入れるように絞り込みました。私がそれをしなければ、すべて大丈夫です。だから私はこれが問題であることを知っています。
この問題をどのように解決できるかについてのガイダンスを期待しています。これは、rtf とすべてをロードするコードです。他のすべてのコードをコメントアウトし、それを独自のスコープに入れ、GC.Collect() を試しました。どんな助けでも大歓迎です。
編集:これが現時点での私のコードです。動作させるために最低限必要なものを除いて、他のすべてを取り出しました。問題はまだあります。ご覧のとおり、FlowDocument と TextRange は他のどこにも参照されていません。
public LoadRTFWindow(string file)
{
InitializeComponent();
using (FileStream reader = new FileStream(file, FileMode.Open))
{
FlowDocument doc = new FlowDocument();
TextRange range = new TextRange(doc.ContentStart, doc.ContentEnd);
range.Load(reader, System.Windows.DataFormats.Rtf);
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
この投稿を見つけました。問題の解決に役立つことを期待していましたが、うまくいきませんでした。どんな種類の助けも大歓迎です。ありがとうございました。
編集:これをチェックしている主な方法について言及する必要があると思います。Windows タスク マネージャーを開いて、アプリケーションのプロセスが使用しているメモリの使用状況を監視しています。上記のコードを実行すると、TextRange.Load() の実行中にアプリケーションが 40,000K から 70,000K になり (これは 400 ページの大きな RTF です)、終了すると 61,000K に落ちてそこにとどまります。私の予想では、40,000K まで低下するか、少なくともそれに非常に近い値になると予想しています。
前に述べたように、メモリ プロファイラを使用したところ、たくさんの段落、実行などがあることがわかりました。オブジェクトはその後も生きています。