Java 如何高效地一次加载多个图像?

Java 如何高效地一次加载多个图像?,java,image,imageview,javafx-2,Java,Image,Imageview,Javafx 2,我正在开发一个应用程序,允许用户将图像分配给人,然后按人的姓名查看图像。我目前正在做的是,当一个人被点击时,这个人的所有图像都将被加载到他们各自的ImageView中。当加载三到四个图像时,这很好,但是当涉及到20多个图像时,事情开始变得有点滞后 所以,我的问题是:如何从文件中高效地加载这些图像而不完全延迟应用程序 我想到的事情: 在启动主应用程序之前加载所有人的所有图像的预加载程序。如果删除其中一个文件,则会出现问题。 在显示所有图像之前,使用迷你预加载程序加载所有图像。 当用户单击此人时,在

我正在开发一个应用程序,允许用户将图像分配给人,然后按人的姓名查看图像。我目前正在做的是,当一个人被点击时,这个人的所有图像都将被加载到他们各自的ImageView中。当加载三到四个图像时,这很好,但是当涉及到20多个图像时,事情开始变得有点滞后

所以,我的问题是:如何从文件中高效地加载这些图像而不完全延迟应用程序

我想到的事情:

在启动主应用程序之前加载所有人的所有图像的预加载程序。如果删除其中一个文件,则会出现问题。 在显示所有图像之前,使用迷你预加载程序加载所有图像。 当用户单击此人时,在不使用加载器的情况下加载图像。
如果希望应用程序在数百个图像中保持可伸缩性,则在应用程序启动之前加载所有图像是不可行的

您看到应用程序延迟的原因很可能是有限的硬盘驱动器带宽分析可能是必要的。您可以做一些事情来改进图像加载,例如使用优化的图像格式/存储图像的缩小版本等,但在某些情况下,您将始终从磁盘加载内容

1我建议您创建一个由ImageView和ProgressIndicator组成的自定义节点。让用户知道正在加载其他图像

2让数量有限的工作线程加载映像,以避免在等待磁盘时过度阻塞


3尽可能预加载和缓存图像。这是使用SoftReferences实际上是一个好主意的少数情况之一。

如果您希望应用程序在数百个图像中保持可伸缩性,则在应用程序启动之前加载所有图像是不可行的

您看到应用程序延迟的原因很可能是有限的硬盘驱动器带宽分析可能是必要的。您可以做一些事情来改进图像加载,例如使用优化的图像格式/存储图像的缩小版本等,但在某些情况下,您将始终从磁盘加载内容

1我建议您创建一个由ImageView和ProgressIndicator组成的自定义节点。让用户知道正在加载其他图像

2让数量有限的工作线程加载映像,以避免在等待磁盘时过度阻塞


3尽可能预加载和缓存图像。这是使用SoftReferences实际上是个好主意的少数情况之一。

我建议可能使用一个巨大的数组,当用户打开图像时,创建一个方法,将所有图像从数组加载到您正在做的任何事情中。我建议可能使用一个巨大的数组,当用户打开图像时,只是创建一个方法,将数组中的所有图像加载到您正在执行的任何操作中。谢谢!只是一个简单的问题-你建议我使用多少线程?我考虑的是5。正确的答案是“在线程仍能带来显著性能提升的情况下添加线程”,例如,不要花费全部时间互相阻塞,但这在很大程度上取决于映像格式、磁盘性能和CPU。。。3-5投,应该不会太远了:-谢谢!只是一个简单的问题-你建议我使用多少线程?我考虑的是5。正确的答案是“在线程仍能带来显著性能提升的情况下添加线程”,例如,不要花费全部时间互相阻塞,但这在很大程度上取决于映像格式、磁盘性能和CPU。。。选择3-5,这应该不会太远:-