我正在编写一个应用程序,它将以高达250kb / sec的速率显示串行/ USB数据 。 我正在使用.net SerialPort类和对DataReceived事件作出反应。 对于这个软件的早期实现,我只是将传入的数据存储在WinForms RichTextBox 。 这个解决scheme工作正常,直到控制中有50k-10万行 ,此时应用程序陷入困境。 从那以后,我试着用WPF来实现我的目标,并发现了同样的问题。 我曾试着只保留文本框中当前可见的文本,并将其余的保存在一个大的List<string>但是这个解决scheme需要大量的解决方法,最后被放弃了 – 我想而不是重新发明轮子 。
现在我来找你一个希望 – 我愿意尝试任何东西 ! 我应该使用自定义控件 (欢迎使用付费和免费控件)? sqlite ? 如上所述的虚拟化 ? 我应该尝试轮询SerialPort而不是对事件做出反应吗?
如何以编程方式设置软件限制策略
通过Linux和Mono编写.NET for Windows
性能关键的GUI应用程序(Windows,Linux)
StringCollection编辑器不存储用户input的值
你如何保护自己免受内存消耗失控打破个人电脑?
使用线程读取数据并直接写入文件。 让您的应用程序每隔一段时间刷新文件的最后x行。 也许甚至有基于读者线程的通知刷新?
通过使用多个线程,您可以保持UI的响应,并直接写入文件,确保您已经收集了所有的数据。 此外,它将允许您暂停显示足够长的时间,以便在继续捕获数据的同时实际复制/粘贴所需的数据。
可能你可以实现你自己的文件阅读器类型,它允许用户一次只加载你实际显示在屏幕上的部分来滚动文件。
如果数据主要是面向行的(ReadLine),那么把它放在ListBox中。 这是在屏幕上放置大量文字的最快控制。
但是你会发现,所有的用户界面控件都是面向人类交互的,而不是端口的速度。 最好的办法是重新考虑你的设计。 这是什么数据呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。