我必须结合让我们说大约 100 个图像(png 文件)。问题不在于将它们结合起来,它运行得足够快。但从存储中加载它们最多需要 4 秒。那是太多的时间了。
所以我可以使用 TPL 或多线程,但它仍然太慢。我怎样才能加快速度?不幸的是,将所有图像保存在主存储中不是一种选择。
图像非常小:从 4KByte 到 10KByte
我正在以这种方式加载图像:
Image img = Image.FromFile(file);
我必须结合让我们说大约 100 个图像(png 文件)。问题不在于将它们结合起来,它运行得足够快。但从存储中加载它们最多需要 4 秒。那是太多的时间了。
所以我可以使用 TPL 或多线程,但它仍然太慢。我怎样才能加快速度?不幸的是,将所有图像保存在主存储中不是一种选择。
图像非常小:从 4KByte 到 10KByte
我正在以这种方式加载图像:
Image img = Image.FromFile(file);
在您的情况下,创建多个线程不会提高 I/O 速度。那是关于你的硬盘的读写速度。
在 4 秒内加载 100 张高质量图像似乎很正常。
两个想法:
如果大部分延迟确实来自 IO,请压缩文件。根据它们的内容,即使是简单的 ZIP 压缩也可以减小它们的大小,从而减少读取的字节数。工作将是在内存中解压缩它们。我不知道这是否适用于你的情况
懒加载它们。您是否需要一直加载所有 100 张图像?也许您可以先加载第一个或最重要的那些,让软件在后台完成其余图像的加载时完成其他工作。
你如何加载你的图像文件?请分享您的一段代码。我的猜测是,您不是一次读取整个文件,而是逐字节读取直到 EOF... 优化文件加载的一种方法是将整个文件加载到预分配的内存缓冲区中。