小编Ale*_*isi的帖子

JavaFX,定制的 VirtualFlow 性能改进技巧

我正在尝试实现自己的 VirtualFlow,但遇到了一些性能问题,并且我不明白瓶颈可能在哪里以及我可以采取哪些措施来改进它。
这是一个包含两个列表的展示,一个包含简单单元格,另一个也包含复选框,两者都有 100_000 个项目(抱歉 gif 质量):

在此输入图像描述

正如您所看到的,我在滚动浏览仅带有标签的简单单元格时没有任何问题,但带有复选框的列表在开始时可能会相当滞后。

为了达到这样的性能(否则会更糟),我记住了我的细胞工厂功能,以便在需要时所有单元都在内存中准备就绪,我想知道是否还有其他方法可以使其更快/更平滑。

我用来显示单元格的代码是:

long start = System.currentTimeMillis();
builtNodes.clear();
for (int i = from; i <= to; i++) {
    C cell = cellForIndex.apply(i);
    Node node = cell.getNode();
    builtNodes.add(node);
}
manager.virtualFlow.container.getChildren().setAll(builtNodes);
long elapsed = System.currentTimeMillis() - start;
System.out.println("Show elapsed: " + elapsed);
Run Code Online (Sandbox Code Playgroud)

我什至添加了这个小日志,最重要的部分似乎是当我打电话时getChildren().setAll(...),单元建筑和布局几乎是立即的

哦,关于fromto参数的另一个注释。当我滚动时,我获取滚动条的值并计算第一个和最后一个可见索引,如下所示:

public int firstVisible() {
    return (int) Math.floor(scrolled / cellHeight);
}

public int lastVisible() {
    return (int) Math.ceil((scrolled + virtualFlow.getHeight()) / cellHeight - 1);
}
Run Code Online (Sandbox Code Playgroud)

编辑回答一些问题: …

javafx ui-virtualization

1
推荐指数
1
解决办法
589
查看次数

标签 统计

javafx ×1

ui-virtualization ×1