【问题标题】:Embedded resources - resx - performance - C#嵌入式资源 - resx - 性能 - C#
【发布时间】:2016-09-09 08:37:19
【问题描述】:

嵌入式资源仅用于将文件编译为二进制部分?

出于性能原因使用嵌入式资源是个好主意吗?

这个问题涉及到

  • XML 文件另存为嵌入资源
  • Resx 文件(字符串)

在这两种情况下,是否有相同的性能优势:一些缓存策略或类似的东西(因为它可以像源代码/程序集一样进行管理)。

例如,代替 resx,我可以使用哈希表(最近创建的)。就我而言,哈希表可能太大而永远留在内存中。那么 Resx 对某些缓存策略有帮助吗?

我对树对象有同样的问题。从 XML 嵌入文件中使用它对我没有帮助,还是我应该实现所有缓存策略?

思考

【问题讨论】:

    标签: c# performance embedded-resource resx


    【解决方案1】:

    添加嵌入式资源功能主要是出于性能原因。在像 Windows 这样的按需页面虚拟内存操作系统上,没有办法更快地做到这一点。您可以充分利用内存映射文件来读取资源内容。

    这并不比读取单独的文件好很多,但您不必为查找文件付费。这通常是对小资源的昂贵操作,并且严重影响应用程序的冷启动时间。无需部署大量文件是非常实用的优势。

    它们当然会占用内存,但它是虚拟内存。只是给处理器编号,每 4096 个字节一个。也是一种廉价的虚拟内存,它由可执行文件而不是页面文件支持。在您访问程序中的资源之前,您实际上并没有付费并开始使用 RAM。除非您反复使用该资源,否则该 RAM 通常会很快再次释放。它确实为您可以嵌入的资源数据量设置了上限,逐渐减少到 2 GB。

    它们作为 XML 资源启动仅在构建时很重要,Resgen.exe 工具在将其嵌入可执行文件之前将其转换为二进制 blob。 XML 的优点是它可以很好地与 IDE 配合使用,并且可以在您丢失原始艺术作品后轻松恢复原始资源。

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 2013-12-29
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2016-04-09
      相关资源
      最近更新 更多