嵌入式资源 - resx - 性能 - C#

时间:2016-05-13 08:30:52

标签: c# performance embedded-resource resx

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

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

这个问题涉及

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

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

例如,代替resx,我可以使用哈希表(最近创建)。在我的情况下,哈希表可能是如此之大,以至于永远留在内存中。那么Resx对某些缓存策略有帮助吗?

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

认为

1 个答案:

答案 0 :(得分:3)

嵌入式资源功能主要是添加的,因为性能原因。在Windows等需求页面虚拟内存操作系统上无法更快地完成任务。您可以充分利用内存映射文件来读取资源内容。

这并不比阅读单独的文件好得多,但你不需要为找到文件而付费。这通常是对小资源的高成本操作,并且严重影响应用程序的冷启动时间。没有大量的文件要部署是一个非常实用的优势。

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

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