目前我的应用程序有一个文本框,可以在屏幕上显示 500 行实时日志记录。由于应用程序有很多繁重的任务在后面运行,所以我尽可能地为我的应用程序改进这部分。打开任何建议。谢谢。
WPF:
<TextBox Text="{Binding StatusMessage}" TextWrapping="Wrap" AcceptsReturn="True" />
方法一:
private void OutputMessage(string msg)
{
//Result
//1000 Lines 108ms
//10000 Lines 1687ms
if(!string.IsNullOrEmpty(msg))
{
string msgWithTimeStamp = System.DateTime.Now.ToString() + ": \t" + msg;
int msgLine = 0;
if (!string.IsNullOrEmpty(StatusMessage))
{
//Only show 500 lines of latest messages...
msgLine = StatusMessage.Count(m => m == '\n');
if (msgLine > 500)
StatusMessage = StatusMessage.Remove(0, StatusMessage.IndexOf("\n") + 1);
StatusMessage = StatusMessage + "\n" + msgWithTimeStamp;
}
else
StatusMessage = msgWithTimeStamp;
}
}
方法 2(更好的性能):
List<string> msgList;
private void OutputMessage(string msg)
{
//Result
//1000 Lines 31ms
//10000 Lines 377ms
if (!string.IsNullOrEmpty(msg))
{
string msgWithTimeStamp = System.DateTime.Now.ToString() + ": \t" + msg;
msgList.Add(msgWithTimeStamp);
if (msgList.Count > 500)
msgList.RemoveAt(0);
StatusMessage = String.Join("\n", msgList);
}
}
最佳答案
您可以使用 ItemsControl 代替 TextBox,并将其 ItemsSource 数据绑定(bind)到 ObservableCollection。然后您只需将每条新消息附加到 ObservableCollection,ItemsControl 将自动更新以在其列表末尾显示新条目。
关于C# 存储和输出字符串列表的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432630/