非常に複雑で、同時に動作しているので、私はここで提示すべきコードに苦労しています。sbtを実行する代わりに.jarから実行するとScala JavaFXアプリケーションが遅くなるのはなぜですか?
私は、比較的複雑なJavaFXのグラフを作成し、ScalaアプリケーションからVBoxの内容を更新することが重要です。
今、コンソールウィンドウでsbt runを使用してアプリケーションを実行すると、sceneragphがすぐに読み込まれます。パッケージ化された.jar(これはsbt-one-jarを使用しています)から実行すると、sceenraphは時間がかかります。
すべてがうまくいきます。すべてが同じように動作しますが、.jarから実行すると魔法のように遅くなります。
とにかく、私はそれが非常に啓発的でない場合でも、いくつかのコードを貼り付けます。
def SetVboxSceneGraph(
id:String,
blob:String,
handler:(MyEvent)=>Unit
)
{
val comp=MyComponent.FromBlob(blob,handler)
comp.CreateNode
val box=GetMyBox(id)
val vbox=box.GetNode.asInstanceOf[VBox]
vbox.getChildren().clear()
vbox.getChildren().add(comp.GetParent)
}
編集:
sillyflyの提案によると、私は、各ステップは、シーングラフの更新にかかる時間を測定しました。遅くの手順は次のとおりです。
comp.CreateNode
これは、一部は私がクラスである、いわゆる「MyComponentの」Sを記述するために開発された(「ブロブ」として渡された)XMLマークアップからのJavaFXシーングラフを構築するための責任があること既存のJavaFXウィジェットからカスタムウィジェットを構築します。シーングラフが作成されると、更新には同じ時間がかかります。
これは、任意のシーングラフで発生、またはコンテンツの問題をしていますか? 'System.nanoTime'のようなもので、どのステップに時間がかかるのか絞り込むことができますか([この回答](http://stackoverflow.com/questions/9458234/measuring-time-in-java/9458267#9458267参照) ) 例えば)? – Itai
また、どのステップが正確に遅くなるかを知ることは有益であると私にも気付いた。私は、System.nanoTimeを使用し、経過時間を別の単位で報告することができる、アプリケーション内のTimerクラスを持っています。どのステップが責任あるかという手がかりを得たら、私はその質問を更新します。 – sbtpr
質問が更新されました。 – sbtpr