我的问题是,在第一次绘制时,我的代码执行需要很长时间。但如果我必须执行第二次绘制,则仅需绘制的时间的一小部分(至少快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);
}
实际上,新元素的最大数量没有限制。它可以根据用户的需求从几百个到数十万个不等。如果一些元素随着时间的推移出现,也是可以接受的。
paintCanvas
方法在运行Java 1.8.0_20-ea-b14,OS X 10.9.3,2012 MacBook Air,1.8GHz的情况下,用156毫秒填充了50万个椭圆。 - jewelsea