在Canvas更新期间GUI被阻止 - 如何优化?

时间:2013-02-16 21:20:51

标签: performance canvas javafx-2

我正在将大约12.000个对象绘制到JavaFX 2.2 Canvas中。 GUI阻塞大约2秒钟,同时测量我的代码的执行时间,我的代码执行时间不到半秒。

所以我想知道我的代码的测量执行时间是如何比GUI被阻止的时间短得多 - 我猜在Canvas上有某种缓冲,所以事情先写入缓冲区并稍后处理?所以在约0.5秒之后,我画到Canvas的所有内容都只写入缓冲区了?

假设一切都是缓冲的,首先导致我的下一个问题:缓冲区中的东西的绘制总是在UI-Thread上完成,所以我无法优化GUI被阻止的时间跨度来绘制东西从缓冲区?即使我从Application线程中绘制到Canvas,当缓存仍然在UI线程上处理时,那么我将不会摆脱这个1.5秒的GUI阻塞?

感谢任何提示!

更新:伪代码:

long start = System.nanoTime();

// Using GraphicsContext, draw ~ 12.000 arc parts (GraphicsContext.drawArc method)
// to a Canvas

long end = System.nanoTime();
double elapsedTime = (end-start)/1000000000.0; //in seconds
System.out.println("elapsed time: " + elapsedTime); // something around 0.5, however the GUI hangs for around 2 seconds - where do the additional 1.5 seconds come from?

我正在做应用程序线程上的所有事情,所以我理解GUI挂起0.5秒,在此期间我向Canvas添加内容。但我无法理解,为什么GUI挂起约2秒,当我在0.5秒后完成对画布的绘制时?

0 个答案:

没有答案