文本框日志,只显示最后100个条目

本文关键字:最后 100个 显示 日志 文本 | 更新日期: 2023-09-27 18:05:50

我正在c#中工作一个GUI项目,我有这个多行文本框。每当应用程序中发生某些事情时,它都会向文本框输出一行,记录所发生事情的一小部分。我希望只显示最后100个左右的条目,以防止出现内存或性能问题。最好的方法是什么?我当前的代码如下:

        string[] CurrentLines = LogWindow.Lines;
        Array.Reverse(CurrentLines);
        Array.Resize<string>(ref CurrentLines, 100);
        Array.Reverse(CurrentLines);
        LogWindow.Lines = CurrentLines;

这整个方法对我来说似乎真的是多余和缓慢的。有人能给我一个更好的方法吗?

文本框日志,只显示最后100个条目

使用SubArray代码片段

public static T[] SubArray<T>(this T[] data, int index, int length)
{
    T[] result = new T[length];
    Array.Copy(data, index, result, 0, length);
    return result;
}

你可以从你的lines数组中获得最后100个LogLines(避免昂贵的Reverse)

然而,这似乎不是最优的。

一个更好的实现是使用固定大小为100的Queue作为文本框的结构:当一个新的日志行到达时,从队列中弹出一行(最老的),并推送新行,然后通过重写堆栈内容来刷新文本框。

这样可以避免反向操作和动态分配。