0

根据标题,从资源而不是应用目录中的文件夹加载图像的性能有什么不同吗?例如。

PictureBox1.Image = My.Resources.MyImage

而不是

PictureBox1.ImageLocation = C:\....\Images\MyImage.png
PictureBox1.Load()
4

3 回答 3

3

这是一个核心的 Windows 设计属性,它没有真正的区别。在这两种情况下,都将涉及从磁盘读取图像。机制不同,但结果是一样的。当您将其作为资源嵌入时,图像已经通过内存映射文件映射到内存中。但是数据不是,一旦你访问资源,你就会触发一个页面错误,让 Windows 将资源读入 RAM。当您从文件中读取它时,您将使用文件系统缓存。它还将文件数据读入 RAM。它应该稍微慢一些,因为文件系统还必须完成在磁盘上查找文件的工作。

当需要再次加载图像时,例如当您在 Paint 事件处理程序中使用它时,如果数据仍在 RAM 中并且没有因为另一个进程需要它而被丢弃,则行为是相同的。您将在不读取文件的情况下获得它。这使得分析这样的代码变得特别困难,你总是会得到满意的结果。

寻找文件的努力在这里起到了平衡作用,如果资源很少使用,它会更快。以永久消耗虚拟地址空间为代价,您永远不想将非常大的图像放入资源中。例如,“非常大”是十几个兆字节。

于 2012-08-11T15:46:00.627 回答
1

不同之处在于从资源加载图像不需要您将路径硬编码到应用程序中。当您的应用程序在资源中时,图像将始终存在。如果您在磁盘上硬编码路径,则情况并非如此。

因此,您应该始终使用资源。我怀疑有任何速度差异。如果有,并且您认为资源的固有优势不会超过它,我保证它可以忽略不计且完全无关紧要。

于 2012-08-11T08:38:53.227 回答
0

如果您想知道哪个更快,请测量它!检查分配很多次之前和之后的时间。

通常,如果资源不变,您会选择资源。这更容易,因为如果您使用方案 2 并且文件不存在会发生什么?

于 2012-08-11T08:31:15.650 回答