2011-01-10 33 views
2

私は着信チャット(インスタントメッセンジャーに似ています)を読み込んでフォーマットし、それをrichtextboxに挿入するアプリを書いています。プログラムの実行時間を長くしておくと、メモリ不足エラーが発生します。私のコードを見た後、私はrichtextboxを決して切り取っていないので、これがだと思います。私は、表示されているテキストを消したくないので、clear()を呼びたくありません。私はおそらく私は200行のような何かの最大サイズでリストを保持する必要が考えていた。このリストは最新のチャットを保持します。チャットログが大きくなった場合は、最後の200行を消去して再挿入します。しかし、私はこの考えを実装する前に誰かがより良い解決策を知っているかどうか尋ねるでしょう。何かご意見は?c#richtextbox outofmemory

+0

MaxLengthプロパティは、おそらくコントロールを文字列を管理するように設定するのに最も近いでしょう。しかし、それはおそらく貧しい選択です。だから、基本的には、それを自分で管理するのが最善の方法です。 – doobop

+0

本当ですか?あなただけのチャットのためにメモリが不足していますか?あなたのユーザーはメガバイトでチャットを送信していますか? – Mehrdad

+0

これは私が最初に思ったことであり、すぐには起こらない、あなたがどれくらいの記憶を持っているかによって決まります。私にとっては、アプリは数日間オープンしなければならなかったが、1ギガのメモリしか持たない友人の1人は、メモリ不足で8時間以内にクラッシュすると言っていた。私は変更を行ったので、正常に動作しているようです – poco

答えて

3

私はおそらく次の操作を行います:

  1. キャッチRichTextBox.TextChangedイベントハンドラで
  2. 、行数(RichTextBox.Lines.Length)をチェック
  3. これはあなたの最大値を超えた場合は、最初のを削除します。

幸運!

+0

ありがとう、これは完全に動作します – poco

0

私は受け入れ答えに同意するが、私はいくつかの明確化を表示するコード例を提供したい:テキストを削除した後)

private void rtbChatWindow_TextChanged(object sender, EventArgs e) 
{ 
    int maxLines = 200; 

    if (rtbChatWindow.Lines.Length > maxLines) 
    { 
     string s = rtbChatWindow.Lines.First(); 
     rtbChatWindow.Text = rtbChatWindow.Text.Remove(0, s.Length).Trim(); 
    } 
} 

あなたはトリム(呼び出していることを確認してくださいそれ以外の場合は、テキストの最初の行にはなりそれが動作しない原因となる空白スペース。