如何制作只存储最后100个条目的高效内存日志,可以快速将结果字符串输出到TextBox(每次更新)?
我正在使用File.AppendAllText
实际记录文本文件,但希望能够查看我的应用程序中的最后一个条目。
答案 0 :(得分:5)
简单队列出了什么问题:
Queue<string> _items = new Queue<string>();
public void WriteLog(string value)
{
_items.Enqueue(value);
if(_items.Count > 100)
_items.Dequeue();
}
答案 1 :(得分:1)
你有没有看过Log4Net?
更具体地说是log4net.Appender.MemoryAppender
答案 2 :(得分:1)
创建一个长度为 maxloglines * maxlogentrywidth 的char数组。将其初始化为所有空白,除了每个 maxlogentrywidth 字符的新行。在您的记录方法中,您偏移到 maxlogentrywidth * rowIndex 并复制字符串中的N个字符,然后复制 maxlogentrywidth-N 空格。按(rowIndex + 1)%maxlines 增加 rowIndex 。
要输出到单个字符串以用于窗口,请使用constructor that let's you index into an array连接两个字符串:new string(chararry, curpos, len) + new string(chararray, 0, curpos-1, chararray.Lengs - curpos)
其中 curpos 为 maxlogentrywidth * rowIndex
当然,您必须添加适当的错误检查和线程安全性。
答案 3 :(得分:0)
可能的方法:
ObservableCollection<string>
ItemsControl
ItemsTemplate
,无边框只读TextBox
当然这有其局限性,因为你无法选择交叉项目,但是没有字符串连接,并且使用正确类型的ItemsControl
,你可以根据需要使用虚拟化。