JavaFX 2.2 キャンバスに約 12,000 個のオブジェクトを描画しています。GUI は約 2 秒間ブロックしますが、コードの実行時間を測定すると、コードの実行時間は 0.5 秒未満であると主張されます。
それで、私のコードの測定された実行時間が、GUI がブロックされている時間よりもはるかに短いのはなぜだろうと思っています。キャンバスに何らかのバッファリングがあると思います。最初にバッファに書き込まれ、後で処理されますか? ~0.5 秒後、Canvas に描画したものはすべてバッファにのみ書き込まれたのでしょうか?
すべてが最初にバッファリングされていると仮定すると、次の質問につながります。バッファ内の描画は常に UI スレッドで行われるのではないので、GUI がブロックされてバッファから描画されるまでの期間を最適化することはできません。 ? アプリケーション スレッドから 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 秒間ハングすることを理解しています。ただし、キャンバスへの描画が 0.5 秒後に終了したときに、GUI が約 2 秒間ハングするのはなぜですか?