【问题标题】:How to improve performance for TableView in JavaFX如何提高 JavaFX 中 TableView 的性能
【发布时间】:2019-11-12 03:09:06
【问题描述】:

我有一个包含 5000 多个条目的 TableView。有没有办法只从数据库中加载前 20 个条目(TableView 一次最多可以显示 20 个条目),当用户向下滚动时,接下来的 20 个条目将从数据库中加载。或者你们有没有更好的方法将 RAM 使用量保持在最低限度?

【问题讨论】:

  • 使用正确的查询即可。
  • 它可能看起来像 SELECT * FROM requests LIMIT 20 -> 这将检索第 1-20 行。 SELECT * FROM requests LIMIT 20, 20 -> 这将检索第 21 - 40 行。SELECT * FROM requests LIMIT 40, 20 -> 这将检索第 41 - 60 行。这些查询需要ORDER BY 一些行。
  • 我同意@DaveB 的回答。在大多数情况下,TableView 可以轻松处理 5000 个条目。您是否遇到问题或只是认为您可以比原生实现做得更好?
  • 我同意,我有超过 100,000 行的 TableView,甚至在其中搜索也非常快。
  • @Sedrick 我认为查询不是这里的问题。我想我确实想多了这个问题。正如 DaveB 指出的那样。 5000个条目应该没问题。感谢您的回复!非常感谢。

标签: javafx tableview


【解决方案1】:

如果视口只有 20 行高,TableView 将不会创建 5000 行图形。它可能只有大约 25 行,足以在屏幕外预加载几行以提高性能。当您向上和向下滚动时,屏幕表行将与新的表模型数据一起循环使用。因此,您可以以某种方式“提高性能”的想法一开始就有点不合时宜。

延迟加载的主要问题是它与 TableView 的许多元素并不真正兼容。例如,当用户单击列标题进行排序时会发生什么?滚动光标应该有多大?如果用户将滚动光标向下拖动到底部会发生什么?

5000 个项目对我来说似乎并不大。您的表格模型应该只包含行显示所需的数据,在大多数情况下,这可以归结为几个字符串和数字属性。因此,除非您的表格有数百列宽,否则您的整个表格应该是合理的大小。对于整个表模型,每行 200 字节只有 1MB。

【讨论】:

  • 是的,完全正确。我只是对其进行测试,JavaFX 可以毫无问题地显示它而不会出现性能问题。非常感谢您的简明解释戴夫。它对我理解 TableView 的内部工作有很大帮助!
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 2013-09-13
  • 2021-10-13
  • 2018-03-01
相关资源
最近更新 更多