C#显示图像(运行时与加载时)

C#显示图像(运行时与加载时),c#,image,winforms,C#,Image,Winforms,我的应用程序允许用户查看图像,一次一个。 有两个按钮(“上一个”和“下一个”),用户可以循环浏览图像。图像路径存储在XML中 当应用程序加载时,我可以为每个图像创建一个变量var myImage=Image.FromFile(path),并将每个图像添加到图像列表中,当用户按下“上一步”或“下一步”时,使用myImageBox.Image=List_Images[x]从列表中检索 …或。。只需将图像的路径存储在字符串列表中,然后使用myImageBox.Image=Image.FromFile(

我的应用程序允许用户查看图像,一次一个。 有两个按钮(“上一个”和“下一个”),用户可以循环浏览图像。图像路径存储在XML中

当应用程序加载时,我可以为每个图像创建一个变量
var myImage=Image.FromFile(path)
,并将每个图像添加到图像列表中,当用户按下“上一步”或“下一步”时,使用
myImageBox.Image=List_Images[x]从列表中检索

…或。。只需将图像的路径存储在字符串列表中,然后使用
myImageBox.Image=Image.FromFile(List_strings[x])从列表中检索路径即可

由于用户可能会在图像中来回循环,我想知道在将所有图像存储为图像变量与将路径存储为字符串之间可能存在哪些性能问题。每次按下按钮时使用Image.FromFile()是否会更慢?或者存储300-500张图像对内存来说是一个更大的问题


[图像分辨率不同,宽300像素,高250像素]

如果您的应用程序在x86机器上运行,则进程地址空间最大为2gig。这是计算阈值的基本开始

图像/位图是非托管资源,因此必须对每个资源使用“使用”或显式处置,内存中有太多不是一件好事。它们与存储在线程堆栈上的值类型或存储在托管堆中的引用类型不同

如果有50个左右的3MB图像,我想我会考虑缓存(特别是如果它们是视频中的帧,向后导航是一个非常常见的操作),否则我会从磁盘加载。现在大多数个人电脑都附带了SSD,这几乎就像从RAM加载一样


您可以编写一些基准测试,但最终用户的差异会有所不同。如果300-500是一个常数,而PC规格是一个变量,那么更好的方法是从磁盘加载。

300-500,我会每次加载文件。在内存中缓存这么多将导致启动时间非常慢。但这取决于电脑规格。一般来说,向后导航只是向前导航的一小部分,因此这是每次加载的主要原因。您可以用Microsoft Picture Viewer试试,我敢肯定每次都是从磁盘加载的。@Jeremy谢谢。我曾考虑将其存储为图像变量,因为我认为这样会更快,但考虑到您的想法,我认为每次都将从文件中加载。是否有一个阈值,比如如果只有50张图片,那么它会更好?我如何选择你作为回答者?(我通过自动更正看到“回答者”不是一个词,但应该是:)