ループ中にTextBox.Textに追加すると、反復ごとにより多くのメモリが消費されるのはなぜですか?
短い質問 180,000回実行されるループがあります。各反復の終わりに、リアルタイムで更新されるTextBoxに結果を追加することになっています。 を使用するMyTextBox.Text += someValueと、アプリケーションが大量のメモリを消費し、数千レコード後に使用可能なメモリが不足します。 TextBox.Text180,000回にテキストを追加するより効率的な方法はありますか? 編集私はこの特定のケースの結果を本当に気にしませんが、なぜこれがメモリを大量に消費しているように見えるのか、そしてテキストボックスにテキストを追加するより効率的な方法があるかどうかを知りたいです。 長い(元の)質問 CSVファイルのID番号のリストを読み取り、それぞれのPDFレポートを生成する小さなアプリがあります。各pdfファイルが生成された後、ResultsTextBox.Text処理され、正常に処理されたレポートのID番号が追加されます。プロセスはバックグラウンドスレッドで実行されるため、アイテムが処理されると、ResultsTextBoxがリアルタイムで更新されます。 現在、180,000のID番号に対してアプリを実行していますが、アプリケーションが使用しているメモリは、時間の経過とともに指数関数的に増加しています。開始時は約90Kですが、約3000レコードで約250 MBを占有し、4000レコードでアプリケーションが約500MBのメモリを占有します。 Results TextBoxの更新をコメントアウトすると、メモリは約90Kで比較的静止したままなので、書き込みResultsText.Text += someValueがメモリを消費する原因であると推測できます。 私の質問は、これはなぜですか?メモリを消費しないTextBox.Textにデータを追加するためのより良い方法は何ですか? 私のコードは次のようになります: try { report.SetParameterValue("Id", id); report.ExportToDisk(ExportFormatType.PortableDocFormat, string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id})); // ResultsText.Text += string.Format("Exported {0}\r\n", id); } catch (Exception ex) { ErrorsText.Text += string.Format("Failed to export {0}: {1}\r\n", new object[] { id, …