n00*_*990 7 java javafx runtime javafx-2 javafx-8
我有一个程序,在执行时加载许多fxml文件.应用程序将在短时间内完成,加载应用程序只需要很长时间.
有许多fxml文件(20+),所有这些fxml文件都加载了Java代码.应用程序已完成并可以使用,但是每次执行程序时都会加载所有文件.fxml文件只能编译一次,因为完成后它们不会被更改吗?
java代码当然会被编译一次,它只是fxml文件.该应用程序现在需要25秒才能启动,加载fxml需要14秒.
有没有办法让这一切更快?
编辑#1:
是否有任何免费提供的工具可以更快地执行应用程序(Java)?或者执行时间仅取决于程序的编写方式?
哪种设计模式可以帮助缩短应用程序的执行时间?
编辑#2:
以下代码将简要解释我的问题:
package main;
.......
.......
public class MainClass {
....
....
List<InformationController> controllerList;
public mainClass(List<InformationControllers> controllerList) {
this.controllerList = otherClass.getControllerList();
loadFXMLFiles();
}
public void loadFXMLFiles() {
for(InformationController controller : controllerList) {
controller.loadFXML();
}
doOtherStuff();
}
....
}
Run Code Online (Sandbox Code Playgroud)
所有那些InformationControllers也加载了其他fxml文件,所以它实际上是一个加载的fxml文件树.这是在应用程序的每个开始时加载的,所以有没有办法只加载一次这样做?
jew*_*sea 18
关于如何加速FXML性能
我将创建这个答案社区维基,如果有其他人有进一步的想法,请编辑并添加它们.
FXMLLoader.load()而应该创建一个FXMLLoader实例,并使用实例loader.load()方法重用该实例.原因是FXML-Loader缓存,例如类查找,因此在加载下一个FXML文件时更快.FXMLLoader.load()JavaFX 8中的文档包含对FXML模板的引用,但我不认为它曾经实现过,所以它可能对你没有帮助.反思是FXML缓慢的原因
我认为Java 8 FXML实现缓慢的关键原因是它如此依赖于反射和反射很慢,如反射教程中所述:
由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化.因此,反射操作的性能低于非反射操作,并且应避免在性能敏感应用程序中频繁调用的代码段中.
| 归档时间: |
|
| 查看次数: |
5048 次 |
| 最近记录: |