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

标签 c# performance embedded-resource resx

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

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

这个问题涉及

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

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

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

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

认为

最佳答案

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

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

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

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

关于c# - 嵌入式资源 - resx - 性能 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205065/

相关文章:

c# - 关于异步任务

c# - 迭代直到达到 int.MaxValue

variables - R中 "variable (number of points included)"移动平均值的高效计算

c# - 部署后找不到嵌入式 Razor View (IIS)

c# - 从资源写入文件,其中资源可以是文本或图像

c# - ASP.NET MVC 5-如何在httpErrors中更改路由?

c# - ASP.NET Core DbContext 注入(inject)

javascript - 如何展平嵌套引用中的数据?

c# - 什么更快 : Regex or string operations?

java - 无法将 ImageIcon 添加到 JFrame