我有一个 winforms 图像列表,其中包含 200 张图像 256x256。
我使用方法 Images.FromFile
加载图像,然后将它们添加到图像列表中。
根据 ANTS .NET 分析器,程序一半的时间花在 Images.FromFile
上。有没有更好的方法来加载图像以添加到图像列表?
另一件可以优化的事情是,加载的图像大于 256x256。那么有没有一种方法可以通过先调整它们的大小来加载它们呢?如果它们的高度大于 256 像素,我只想统一缩放它们。
有优化这个的想法吗?
编辑:它们是 JPEG。
最佳答案
您没有说图像实际比 256x256 大多少 - 现代数码相机图像远比这大。
磁盘 I/O 可能非常慢,我建议您首先大致了解您实际读取了多少兆字节的数据。
然后您可以确定是否存在细微的“Image.FromFile”问题或简单的“这就是我的计算机/驱动器/防病毒扫描程序/网络实际上有多慢”的问题。
基本文件 I/O 性能的简单测试将对每个图像而不是 Image.FromFile() 执行 File.ReadAllBytes() - 这将告诉您花在磁盘上的时间比例以及什么使用图像处理 - 我怀疑您会发现它主要是磁盘,此时您唯一加速它的机会可能是从文件中获取 JFIF 缩略图的技术之一。或者,也许人们可以通过部分读取渐进式 JPEG 来想象聪明的东西,尽管我不知道是否有人这样做,也不知道您的文件是否是渐进式的(他们可能不是)。
我真的不知道你需要多快的速度来加载这些文件,但如果问题是交互式应用程序在你加载文件时挂起,那么想办法让它对用户更好——也许使用 BackgroundWorker异步加载它们,也许按文件大小的升序对图像进行排序,然后先加载小的图像以获得更好的主观性能。
关于c# - Image.FromFile 非常慢。任何替代方案,优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053509/