小编Ren*_*ues的帖子

JavaFX Canvas延迟

我正在尝试将一些Java2D代码转换为JavaFX,并且我遇到了关于JavaFX Canvas性能的问题.在某些时候,我将不得不在屏幕上绘制数千个小圆圈.

我的问题是,在第一张图中,我的代码需要花费大量时间来执行.但是如果我必须进行第二次绘图,则只需要一小部分时间绘制(它至少快10倍).

有什么我做错了吗?有没有办法防止这种初始延迟?

我写了这段代码来测试它.在这段代码中,我在1000 x 1000画布(之前构建)上的随机位置绘制了500,000个圆圈.我将此代码链接到按钮单击事件,并且在我第一次单击它时需要10秒才能执行.但如果我再次点击,只需0.025秒.

private void paintCanvas() {
    long initTime = System.currentTimeMillis();

    GraphicsContext cg = canvas.getGraphicsContext2D();
    cg.setFill(Color.WHITE);
    cg.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
    cg.setFill(Color.rgb(0, 0, 0, 0.1));

    Random rand = new Random();
    for (int i = 0; i < 500000; i++) {     
        cg.fillOval(1000 * rand.nextFloat(), 1000 * rand.nextFloat(), 2, 2);
    }

    long endTime = System.currentTimeMillis();
    System.out.println("Time spent on drawing:" + (endTime - initTime)/1000.0f);        
}
Run Code Online (Sandbox Code Playgroud)

实际上没有新元素的最大数量.根据用户需求,它可以从几百到几十万不等.是的,如果一些元素随着时间的推移而流行,那就没关系了.

performance javafx canvas

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

标签 统计

canvas ×1

javafx ×1

performance ×1