【问题标题】:Textbox log, Only showing the last 100 entries [duplicate]文本框日志,仅显示最后 100 个条目 [重复]
【发布时间】:2014-05-28 21:28:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# logging textbox


    【解决方案1】:

    使用来自this SO post的子数组代码sn-p:

    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 作为文本框的结构:当新的日志行到达时,从队列中弹出一行(最旧的),然后推送新行,然后通过将堆栈内容重写到其中来刷新您的文本框。

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

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 2018-03-28
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多