文件监听变化
背景
在开发软件的时候,有一个子功能需要监听文件中的文本变化,实时更新并显示正确的内容。此外,该功能还需要支持快速切换文件并显示不同的文本内容。
第一次问题
方案
打开窗口后,开启一个线程。在线程中,每隔100ms读取文本内容。当文本修改时间发生变化时,发送信号到UI层。接收到信号后,UI层直接进行文本渲染操作。当切换文件时,停止线程并清空UI层的数据,同时修改线程中的文件路径。
问题
切换文件时,线程停止相对较慢,导致打开文件卡顿。
第二次问题
方案
打开窗口后,开启一个线程。在线程中,每隔100ms读取文本内容。当文本修改时间发生变化时,发送信号到UI层。UI层接收到对应文本变化的信号后,直接进行文本渲染操作。当切换文件时,清空UI层的数据,并同时修改线程中的文件路径。使用加锁控制线程中的变量。
问题
文件读取发生变化的信号发送过多,导致ui层处理比较慢,出现信号堆积,程序卡死的情况
目前解决方案
通过观察者模式,将线程中读取到的变化文本缓存在内存中。在UI层开启一个定时器,每隔100毫秒读取一次线程中的变化文本数据,这样可以解决信号堆积问题。并且在切换文本的时候,通过创建不同的UI组件,将UI组件缓存,增量更新文本变化,以提高UI控件的渲染速度。