【问题标题】:Delphi lines colored Text component replacing TRichEdit to improve performancesDelphi 用彩色文本组件替换 TRichEdit 以提高性能
【发布时间】:2011-12-29 22:05:09
【问题描述】:

我目前在我的一个软件(在 Delphi 7 中)中使用 TRichEdit 作为“实时”事件日志查看器,并且我最近对我的软件进行了分析,而 TRichEdit 占用了超过 40% 的软件 cpu 时间。

我只是想测试其他组件以比较性能,这个组件必须有:

  • 线条着色(可能是 LINE 语法颜色,因为不同的颜色 行有不同的前缀或 HTML 着色等)。
  • 轻松保存到文件功能(到 RTF 或 到 HTML)。
  • 免费或开源。
  • 性能好。即使是作为查看器的“大文件”(可能是 200 个月)。

信息:我还在查看this post,但没有给我很好的答案。

【问题讨论】:

  • 那么,SynMemoEx component 出了什么问题?
  • @LURD 我真的很喜欢 Synopse 组件,但是在这里,我在从站点中“提取”SynMemoEx 时遇到了一些问题。

标签: delphi viewer trichedit


【解决方案1】:

查看大约 1996 年的 TConsole / TColorConsole:http://www.torry.net/authorsmore.php?id=604

它不支持 HTML,也不支持 RTF,但它可以非常快地滚动彩色文本。 ;>

【讨论】:

  • 嗯... TConsole 来自...嗯 Danny Thrope ?但在源码中只有 TConsole 没有 TconsoleColor。
  • 不,是丹尼·索普寄来的。 :P TColorConsole 在 D2 版本中。向下滚动到 TConsole 类。
  • 好的,丹尼,我试过了:迷你。比 TRichEdit 快 4 倍。确实是好组件,值得被更多人了解和曝光。我会寻找 rtf 文件保存。
  • 谢谢。这在当时是一个有趣/有益的项目。很高兴听到它仍然可以编译和运行!
【解决方案2】:

对于“实时”事件日志查看器,我建议使用VirtualTreeView。它能够处理几乎无限数量的行,具有大量的自定义功能(如自定义着色和自定义绘制任何东西),支持 unicode 并且即使列表中已有数百万个项目也能以极快的速度运行。理解一切是如何运作的确实需要一些时间,但一旦你弄清楚了,你就永远不会回头。它甚至支持就地编辑(包括对每一列的自定义控件的支持)。每个项目都是一个记录,可以保存您需要的任何数据(不仅仅是您要显示的数据)。还支持增量搜索,以及从代码中极速搜索,即使您拥有数百万个项目也没关系。

由于操作系统或组件本身施加的许多限制,我会避免使用任何类型的“标准”文本编辑组件。我知道的唯一可以支持大部分(如果不是全部)需求的组件已经提到 - TRichView。我试过TSynEdit,我可以说它有很多功能但严重缺乏性能。

试试 VirtualTreeView,你不会后悔的。

【讨论】:

  • 一直想试试VirtualTreeView 不知道能不能当编辑器。我在同一个项目中有 TSynEdit(用于其他目的):慢!
  • 等一下。现在你想要一个可以用作编辑器的控件?!
  • @DavidHeffernan 嗯..对不起,我只想要一个观众。我会说,对我来说,VirtualTreeView 显示 TreeView,我不知道它显示“线条彩色文本”。
  • 这里为什么是-1?恕我直言,VirtualTreeView 是一个非常好的专家。它具有编辑功能,但您不需要它来记录事件,不是吗?
  • VirtualTreeView 最好的地方是数据的虚拟化,即数据最好保存在组件之外。
【解决方案3】:

也许您可以登录到客户端数据集。 DBGrid 允许您指定各种绘图选项,因此您可以根据可见线指定背景颜色。 ClientDataset 可以轻松管理相当多的数据,而网格只会绘制那些可见的行。

无论如何,如果你记录很多,不断重绘记录组件会减慢应用程序的速度。也许您应该通过在临时日志中缓存行并每隔几秒将它们批量添加到可见日志中来降低日志的实时性。

【讨论】:

  • DBGrid ?为什么不呢,但我不确定保存到文件是否容易做到。我还有一些机制来显示“回溯时间”的日志并只显示最后几行,但是对于长而大的流来说,它仍然需要很多时间。
  • ClientDataset 本身有保存和加载的方法。它以 XML 格式存储数据,尽管我不确定它的速度有多快,当然这可能不是您希望的格式。无论如何,你不需要保存网格,你保存数据集。如果日志也需要实时保存,我会创建一个日志方法(类),它接受日志字符串并将其推送到数据集和文件。如果在文件末尾添加信息,保存日志文件会很快。不要尝试在每次保存时重写整个文件。
  • 如果确实有那么多数据,那么记录到数据库并按需生成 HTML 报告可能会更好。您可以使此页面在上一个日志之后甚至轮询(使用 AJAX)以获取新日志。但除了所有可能的解决方案之外,想想你到底需要什么以及为什么是一件好事。如果您的要求明确,也许您会自己想出一个好的解决方案。
猜你喜欢
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多