Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌入式资源-resx-performance-C#_C#_Performance_Embedded Resource_Resx - Fatal编程技术网

嵌入式资源-resx-performance-C#

嵌入式资源-resx-performance-C#,c#,performance,embedded-resource,resx,C#,Performance,Embedded Resource,Resx,嵌入式资源仅用于将文件编译为二进制部分 出于性能原因使用嵌入式资源是个好主意吗? 这个问题涉及 保存为嵌入式资源的XML文件 Resx文件(字符串) 在这两种情况下,是否有相同的性能优势:一些缓存策略,或者类似的东西(因为它可以像源代码/程序集一样进行管理) 例如,我可以使用一个哈希表(最近创建的),而不是resx。在我的例子中,哈希表可能如此之大,以至于永远留在内存中。那么Resx是否有助于缓存策略 对于树对象,我也有同样的问题。从XML嵌入文件中使用它对我没有帮助,或者我应该实现所有缓存

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

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

这个问题涉及

  • 保存为嵌入式资源的XML文件
  • Resx文件(字符串)
在这两种情况下,是否有相同的性能优势:一些缓存策略,或者类似的东西(因为它可以像源代码/程序集一样进行管理)

例如,我可以使用一个哈希表(最近创建的),而不是resx。在我的例子中,哈希表可能如此之大,以至于永远留在内存中。那么Resx是否有助于缓存策略

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


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

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

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

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