对于某些文件,加载文件图标有时会很慢

时间:2018-10-14 19:55:12

标签: java swing

我正在尝试使用Java足够有效地在Windows上加载文件图标,以便可以在文件浏览器应用程序中显示它们。

大多数情况下,图标的加载时间约为2到15毫秒,但有时对于某些文件而言,加载单个图标可能需要10秒钟(!)。我只是使用FileSystemView.getFileSystemView().getSystemIcon(File)。我还尝试了JIconExtract-library(https://github.com/MrMarnic/JIconExtract),它似乎也有同样的问题。

import java.io.File;

import javax.swing.filechooser.FileSystemView;

public class Test {

    public static void main(String[] args) {
        File folder = new File("C:\\Users\\XYZ\\Downloads");
        File[] files = folder.listFiles();
        for (File file : files) {
            long start = System.currentTimeMillis();
            FileSystemView.getFileSystemView().getSystemIcon(file);
            long end = System.currentTimeMillis();
            System.out.println(file.getName() + ": " + (end - start));
        }
    }
}

“慢速运行”的示例输出:

story.ni: 4
StructuredXmlEditor.exe: 96
stone_soup-0.21.1-win32-installer.exe: 798
stone_soup-0.21.1-console-win32.zip: 708
star.png: 2
StageUtils.java.zip: 2
SS2Tool-v.6.1.1.6.exe: 9268
Squiffy.5.1.1.Windows.exe: 10535
square.ttf: 1272
Spit_Splat-Mike_Koenig-1170500447.wav: 4
spelv104.exe: 31
spelv107.rar: 32
Speedy.zip: 2

Windows似乎也可以缓存图标或其他内容,因为随后的运行非常快-一段时间。

为什么加载图标最多需要10秒钟?我可以使用哪种线程机制来解决此问题?我目前仅使用带有少量线程的ExecutorService,但是如果加载单个图标最多可能需要10秒钟,那么我的线程就会停滞不前,而且一段时间后我会看到很多没有图标的文件。 (我对多线程不是很有经验)

0 个答案:

没有答案