我的应用程序允许用户一次查看一张图像。 有 2 个按钮(“上一个”和“下一个”),以便用户可以循环浏览图像。图像路径存储在 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。这是计算阈值的基本起点。
图像/位图是非托管资源,因此您必须对每个资源使用“using”或显式 Dispose,内存中有太多资源并不是一件好事。它们与存储在线程堆栈中的值类型或存储在托管堆中的引用类型不同。
如果有 50 个左右 3mb 的图像,我想我会考虑缓存(特别是如果它们是视频中的帧,向后导航是一个非常常见的操作),否则我会从磁盘加载。无论如何,现在大多数 PC 都配备了 SSD,这几乎就像从 RAM 加载一样。
您可以编写一些基准测试,但最终用户的情况会有所不同。如果 300-500 是一个常数,而 PC 规范是一个变量,则更好的方法是从磁盘加载。
关于C# 显示图像(运行时与加载时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204630/