日志控件的进一步性能优化

之前我们在众多的库中选择了使用Log4Net进行日志的组件的存储。通过配置xml设定日志的存储路径,并通过配置AppenderSkeleton,实现了日志在写入文件的同时,可以展现在界面中。

针对在界面中的展示,我们实现了,读取软件启动时所有的历史日志,继续后续日志的插入功能,并实现了正序插入和倒序插入后刷新到最新行,以及搜索日志的功能。

接着我们这个窗口封装了一个控件,可以在其他的地方直接使用这个日志控件。

由于频繁刷新控件,可能会导致锁死的问题,我们改成使用Dispatcher.CheckAccess 并在其他线程中时,使用BeginInvoke ,插入队列解决了死锁的问题。


如果日志频繁插入,会造成性能越来越慢,插入越来越卡的情况,针对这个情况,我们要增加进一步优化实时显示的性能。

首先解决频繁刷新 UI,在日志量大时会导致 UI 卡顿甚至假死的问题。我们建立一个缓存日志,使用DispatcherTimer定时刷新到UI中。

其次TextBox控件的自动换行和关闭自动换行性能上存在差异,所以我们增加一个配置项,将控件的自动换行功能默认关闭。

性能越来越慢的问题,渲染内容越多,UI 响应越慢,所以我们增加一个配置项。可以按照字符数量限制同时显示的大小,在超出时,移除掉超出字符串。

最后优化一个体验问题,可以防止“自动下滚”打断用户查看历史内容,当用户拖动(或点击)TextBox的滚动条时,临时关闭AutoScrollToEnd,等用户停止操作(如松开鼠标后2秒)再恢复ScrollToEnd。

使用AI生成具体代码后,合入,性能测试有显著提升。

在短期内大量写入的情况,UI卡顿的幅度大幅降低。内存占用不在显著上涨。