我正在使用C#进行GUI项目,我有这个多线文本框。每当应用程序中发生某些事情时,它就会向文本框输出一行,记录发生的事情的一小部分。我想只显示最后100个条目以防止内存或性能问题。做这个的最好方式是什么?我目前的代码是这样的:
string[] CurrentLines = LogWindow.Lines;
Array.Reverse(CurrentLines);
Array.Resize<string>(ref CurrentLines, 100);
Array.Reverse(CurrentLines);
LogWindow.Lines = CurrentLines;
这整个方法对我来说似乎真的多余而且慢。有人能给我一个更好的方法吗?
答案 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作为文本框的结构:当新的日志行到达时,从队列中弹出一行(最旧的),并推送新的行,然后通过将堆栈内容重写到其中来刷新文本框。
这样就可以避免反向操作和动态分配。