Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#.net,加载图像_C#_Image Processing_.net - Fatal编程技术网

c#.net,加载图像

c#.net,加载图像,c#,image-processing,.net,C#,Image Processing,.net,我必须合并100幅图像(png文件)。 问题在于没有将它们结合起来,这样运行速度足够快。 但从存储中加载它们需要4秒。 时间太多了 因此,我可以使用TPL或多线程,但它仍然太慢。 我怎样才能加快速度?不幸的是,在主存储器中保存所有图像不是一个选项 图像非常小:从4字节到10字节 我以这种方式加载图像: Image img = Image.FromFile(file); 在您的情况下,创建多个线程不会提高I/O速度。这与硬盘的读写速度有关 在4秒内加载100个高质量图像似乎很正常。在您的情况下,

我必须合并100幅图像(png文件)。 问题在于没有将它们结合起来,这样运行速度足够快。 但从存储中加载它们需要4秒。 时间太多了

因此,我可以使用TPL或多线程,但它仍然太慢。 我怎样才能加快速度?不幸的是,在主存储器中保存所有图像不是一个选项

图像非常小:从4字节到10字节

我以这种方式加载图像:

Image img = Image.FromFile(file);

在您的情况下,创建多个线程不会提高I/O速度。这与硬盘的读写速度有关


在4秒内加载100个高质量图像似乎很正常。

在您的情况下,创建多个线程并不能提高I/O速度。这与硬盘的读写速度有关


在4秒内加载100个高质量图像似乎很正常。

如何加载图像文件?请分享你的一段代码。我猜你不是一次读取整个文件,而是一个字节一个字节地读取,直到EOF。。。优化文件加载的方法之一是将整个文件加载到预先分配的内存缓冲区。

如何加载图像文件?请分享你的一段代码。我猜你不是一次读取整个文件,而是一个字节一个字节地读取,直到EOF。。。优化文件加载的一种方法是将整个文件加载到预先分配的内存缓冲区中。

两个想法:

  • 如果大部分延迟确实来自IO,则压缩文件。根据它们的内容,即使是简单的ZIP压缩也可以减小它们的大小,从而减少读取的字节数。工作将是在内存中解压它们。我不知道这是否适用于你的情况

  • 懒得加载它们。您是否需要一直加载所有100个图像?也许你可以先加载第一张图片,或者最重要的图片,让软件在后台加载完剩下的图片后再做其他的事情

    • 两个想法:

      • 如果大部分延迟确实来自IO,则压缩文件。根据它们的内容,即使是简单的ZIP压缩也可以减小它们的大小,从而减少读取的字节数。工作将是在内存中解压它们。我不知道这是否适用于你的情况

      • 懒得加载它们。您是否需要一直加载所有100个图像?也许你可以先加载第一张图片,或者最重要的图片,让软件在后台加载完剩下的图片后再做其他的事情



      我会使用分析器来查看它的实际速度。可以是I/O,也可以是其他代码。(我使用ANTS Performance Profiler来完成这类任务)听起来你受到了硬件的限制,试试Uwe建议的Profiler,如果它没有显示任何东西,那么你只需要一个更快的HDD/SSDI就可以使用Profiler来查看它的实际速度有多慢。可以是I/O,也可以是其他代码。(我使用ANTS Performance Profiler执行此类任务)听起来您受到硬件的限制,请尝试Uwe建议的Profiler,如果它没有显示任何信息,那么您只需要一个更快的HDD/SSD。这些文件非常小:从4KB到10KB。小文件在磁盘上更零碎。这可能会导致不良的寻道时间和旋转延迟。如果使用单线程和多线程运行,会发生什么情况?结果会改变吗?在某些情况下,持续时间会增加,而在另一些情况下,时间会变短,但不会明显缩短。文件非常小:从4KB到10KB。小文件在磁盘上的碎片更大。这可能会导致不良的寻道时间和旋转延迟。如果使用单线程和多线程运行,会发生什么情况?结果是否会改变?在某些情况下,持续时间会增加,而在其他情况下,持续时间会变短,但不会显著变化。即代码:Image img=LoadImgFromFile(CurDirImg+imgNameAr[i]);什么是预分配内存缓冲区?我如何在.net中使用它?LoadImgFromFile()它不是.net Framework方法。你能发布这个函数的源代码吗?另外,为什么要使用它而不是标准的Image.FromFile()方法?@L–mTranDuy抱歉。这是代码:Image img=Image.FromFile(file);这就是代码:Image img=LoadImgFromFile(CurDirImg+imgNameAr[i]);什么是预分配内存缓冲区?我如何在.net中使用它?LoadImgFromFile()它不是.net Framework方法。你能发布这个函数的源代码吗?另外,为什么要使用它而不是标准的Image.FromFile()方法?@L–mTranDuy抱歉。这是代码:Image img=Image.FromFile(file);因为它们似乎是PNG文件,所以ZIP压缩不太可能有任何用处。但是,如果所有图像都压缩到一个ZIP文件中,这肯定会有所帮助,但我怀疑这是否可行(因为manton可能对源数据没有任何控制)。@L–mTranDuy PNG是轻微压缩的,但即使这样,内容也会说压缩是否值得。尝试压缩一个白色矩形。我得到了一个大小为PNG大小20%的ZIP。很有趣,因为PNG格式应该依赖于的一个变体,这是ZIP格式使用的算法。我想这两种算法有足够多的变化,在某些特定场景中会得到如此不同的结果。@MPelletier我将尝试你的两种方案。我想这是我能做的最好的了。@manton我希望你在接受我的回答之前,先看看我的建议是否真的有效,是否做得更好,但是谢谢你,祝你好运。这是一个有趣的项目,我发现优化总是一个有趣的挑战。因为它们似乎是PNG文件,所以ZIP压缩不太可能有任何用处。但是,如果所有图像都压缩到一个ZIP文件中,这肯定会有所帮助,但我怀疑这是否可行(因为manton可能对源数据没有任何控制)。@L–mTranDuy PNG是轻微压缩的,但即使这样,内容也会说压缩是否值得。试着压缩一个