お世話になります。
C#にて、フォーム内のテキストボックスに、定期的にログを追加して表示しております。1日の日替わりでファイルへ出力し、テキストボックスの内容をクリアしてますが、その時に、Out Of Memory が発生しました。 Clear 処理(=メモリ解放する?)と思いますので、要因についてご教授をお願いいたします。
Exceptionの内容から推測すると、Memory不足に陥ってると思いますが、OS全体のメモリ不足なのか、アプリケーション内でのメモリ不足なのか?判断しかねております。
以下、スタックトレースと処理のソースです。
2016/01/03_00:00:01,303 - 理由種類 'System.OutOfMemoryException' の例外がスローされました。 2016/01/03_00:00:01,303 - スタックトレース 場所 System.String.InternalCopy(String str) 場所 System.Text.StringBuilder.ToString() 場所 System.Windows.Forms.Control.get_WindowText() 場所 System.Windows.Forms.TextBoxBase.get_WindowText() 場所 System.Windows.Forms.Control.set_WindowText(String value) 場所 System.Windows.Forms.TextBoxBase.set_WindowText(String value) 場所 System.Windows.Forms.Control.set_Text(String value) 場所 System.Windows.Forms.TextBoxBase.set_Text(String value) 場所 System.Windows.Forms.TextBox.set_Text(String value) 場所 System.Windows.Forms.TextBoxBase.Clear()
C#
1private void timer1_Tick(object sender, EventArgs e) 2{ 3 try 4 { 5 // ログをキューから取出し表示する_ 6 DateTime dtNow = DateTime.Now; 7 lock (_logBufferQue) 8 { 9 while (_logBufferQue.Count > 0) 10 { 11 txtMessage.AppendText( 12 String.Format("{0} - {1}", dtNow.ToString("yyyy/MM/dd_HH:mm:ss"), _logBufferQue.Dequeue())); 13 txtMessage.AppendText(Environment.NewLine); 14 } 15 } 16 // 日替り判定_ 17 if (_dateTimeText.Substring(0, 10) != System.DateTime.Now.ToString("yyyy/MM/dd")) 18 { 19 //日替わりしたら、現在表示している情報をファイルに保存する_ 20 SaveSystemLog(true); // 「前日」でファイルに保存 21 txtMessage.Clear(); 22 } 23 // 現在日付を保持_ 24 _dateTimeText = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm"); 25 } 26 catch (Exception exp) 27 { 28 Console.WriteLine("FormChild00000.timer1_Tick(): ログの表示、または日替り判定に失敗しました。", 29 exp.Message, 30 exp.StackTrace); 31 } 32}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/05 10:59