【问题标题】:Get resource without reading it completely into memory获取资源而不将其完全读入内存
【发布时间】:2010-03-09 14:35:43
【问题描述】:

我在 Compact Framework 上有一个应用程序,它有一些大型嵌入式资源(其中一些是几兆字节)。我正在调用assembly.GetManifestResourceStream(...),它返回一个Stream 对象。但是,我注意到在某些设备上,此调用不仅需要相当长的时间,还会导致设备耗尽可用内存。最终我使用反射器在紧凑框架上查看此方法的代码,它使用内部方法获取资源数据的byte[]。然后它返回包裹在 MemoryStream 中的数据。

有什么方法可以在不使用此调用的情况下检索资源,因为它总是将所有内容读入内存?理想情况下,我想使用Stream,我可以随机访问它,而无需将整个内容读入内存(类似于FileStream 的工作方式)。如果我可以简单地在程序集上打开一个FileStream 并在适当的偏移量处开始读取,那将会非常简洁,但我怀疑这是嵌入资源的方式。

【问题讨论】:

  • 当你的目标是内存有限的设备时,为什么你有这么大的资源?
  • 我可以毫无问题地轻松使用有限内存设备上的资源,因为我已经能够有效地按需使用我需要的部分。

标签: c# compact-framework .net-2.0


【解决方案1】:

不要使用嵌入式资源。将其添加为内容文件并使用文件流将其从磁盘打开。

【讨论】:

  • 很遗憾,我不能真正做到这一点,因为这会影响应用程序的部署方式。它实际上是一个非常简单的应用程序(单个程序集 exe)。我需要一个单独的安装程序来管理各个内容文件。
【解决方案2】:

我发现了一个开源工具,它公开了许多程序集元元数据,并允许我手动访问资源: http://www.jbrowse.com/products/asmex/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多