1

我在 JavaFX 2.2 Canvas 上绘制了大约 12.000 个对象。GUI 阻塞了大约 2 秒,而测量我的代码的执行时间声称我的代码的执行时间不到半秒。

所以我想知道我的代码的测量执行时间怎么会比 GUI 被阻塞的时间短得多 - 我猜 Canvas 上有某种缓冲,所以首先将内容写入缓冲区并稍后处理?所以大约 0.5 秒后,我在画布上绘制的所有内容都只写入缓冲区?

假设一切都首先被缓冲导致我的下一个问题:缓冲区中事物的绘制是否总是在 UI 线程上完成,所以我无法优化 GUI 被阻塞以从缓冲区中绘制事物的时间跨度? 即使我会从应用程序线程绘制到画布,当缓冲区仍在 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 秒,在此期间我正在向画布添加东西。但是我不明白,当我在画布上的绘图在 0.5 秒后完成时,为什么 GUI 会挂起约 2 秒?

4

0 回答 0