【问题标题】:Is it quicker to set .Net PictureBox.Image from a resource file or from a folder从资源文件或文件夹中设置 .Net PictureBox.Image 是否更快
【发布时间】:2012-08-11 07:57:41
【问题描述】:

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

PictureBox1.Image = My.Resources.MyImage

而不是

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

【问题讨论】:

    标签: .net vb.net performance resources


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我想知道资源是否通过应用程序加载到内存中,而不是保留在硬盘上的外部文件。同意速度差异很小,其他好处更重要
      【解决方案3】:

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

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

      【讨论】:

      • 这可能行不通,至少它不会给你一个准确的数字。图片最终会被缓存,并且在初次试用后加载速度会更快。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      相关资源
      最近更新 更多