我有一個自定義日誌框架寫入System.Windows.Forms.TextBox。我現在寫的文本框的方法是這樣的:是否有任何其他方式將文本附加到Textbox控件?
tbLog.Text += newLogEntry.Text;
這種方法的問題是,每個這種執行從tbLog.Text和newLogEntry.Text字符串時被連接,然後分配給tbLog.Text。隨着TextBox中的日誌增長,操作變得非常耗費內存並越來越慢。
有沒有辦法做到這一點更快,更高效?
我有一個自定義日誌框架寫入System.Windows.Forms.TextBox。我現在寫的文本框的方法是這樣的:是否有任何其他方式將文本附加到Textbox控件?
tbLog.Text += newLogEntry.Text;
這種方法的問題是,每個這種執行從tbLog.Text和newLogEntry.Text字符串時被連接,然後分配給tbLog.Text。隨着TextBox中的日誌增長,操作變得非常耗費內存並越來越慢。
有沒有辦法做到這一點更快,更高效?
該文本框有一個功能AppendText()
。您應該使用它,因爲它比+=
運算符更好。
'問題'是將一個字符串附加到另一個字符串,每次都在一個新字符串中生成結果。 當你做很多連接時,這可能會非常昂貴。
如果我是你,我不會直接登錄到TextBox。我只會跟蹤日誌消息,並使用文本框來顯示日誌。 通過這樣做,您可以例如選擇將日誌保存到文本文件,或選擇以任何其他方式可視化日誌。
例如,您可以將郵件保留在StringCollection
或List<String>
中。除了在文本框中對其進行可視化以外,還可以使用ListBox作爲實例,並且每次向日志添加新項目時,都可以向ListBox添加新項目。但是,我會確保這不緊密耦合。 您的日誌類可能會觸發一個事件,例如每次將新消息保存到日誌時。 然後,您可以擁有不同的「觀察員」,通過訂閱事件來跟蹤日誌,並在每次事件發生時採取適當的行動。
就我個人而言,我會在使用.Append()的第一個StringBuilder中完成所有工作。然後,我將使用StringBuilder上的.ToString()方法設置textbox文本屬性。
你爲什麼要登錄到文本框?應用程序關閉的那一刻你將失去日誌。它是否必須保留完整的歷史記錄,或只是最新的x條目? – Oded 2010-02-18 08:49:46