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

时间:2014-05-28 21:28:20

标签: c# logging textbox

我正在使用C#进行GUI项目,我有这个多线文本框。每当应用程序中发生某些事情时,它就会向文本框输出一行,记录发生的事情的一小部分。我想只显示最后100个条目以防止内存或性能问题。做这个的最好方式是什么?我目前的代码是这样的:

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

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

1 个答案:

答案 0 :(得分:0)

使用this SO post中的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;
}

您可以从线阵中获取100个最后一个LogLines(避免代价高昂的反向)

然而,它似乎并不是最佳选择。

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

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