【问题标题】:Working with Zipped folder from memory使用内存中的压缩文件夹
【发布时间】:2013-03-05 04:47:14
【问题描述】:

我正在制作一个 XNA 游戏,它使用了很多(目前约 2800 个)小资源文件。在未存档的情况下将它们从一个地方移动到另一个地方已经成为一个问题,所以我想也许我可以压缩它们并让游戏自动将它们解压缩到内存中,最好是。我还不需要写作能力,现在只需要阅读。

有没有一种简单的方法可以将文件夹解压缩到内存中并像访问这些文件一样简单,或者像磁盘上的常规文件一样简单?


我一直在阅读一些类似的问题,我看到很多人说操作系统(在我的例子中是 Windows)可以比 ram 驱动器更好地处理文件缓存。我现在只是解压缩和读取文件,但将来我可能需要修改或创建新文件,我希望它对用户来说是快速和无缝的。考虑到我未来的目标,也许我应该采取不同的方法来解决我当前的问题?

【问题讨论】:

  • 随意将标签更改为更合适的

标签: c# .net io zip memory-mapped-files


【解决方案1】:

我没有亲自尝试过,但如果您希望能够在内存中压缩/解压缩,您可以使用MemoryStream 并将其传递到库中(例如https://github.com/icsharpcode/SharpZipLib)。您可能需要记住的事情,您是否只是将瓶颈转移到另一个瓶颈?

您也可以尝试类似在 HTML 中使用 Sprites 的方法。您将所有 Zip 合并为 1,并带有它们在文件中位置的索引。然后你将你的 FileStream.Position 移动到你正在寻找的资源的位置,阅读(你需要的数量)然后用它做你需要的事情。您需要确保如果您重建任何东西,您会重建所有组合索引等。然后您只需复制 1 个文件,碰巧在该文件中您有大约 2800 个较小的感兴趣段。

【讨论】:

  • 我相信与硬盘相比,我们的内存“瓶颈”是巨大的。我尝试了一个 ram 磁盘,它非常快,但我需要一些可以为最终用户部署的东西。我认为只需压缩整个资产文件夹就可以了,这就是 zip 的用途。
  • 您可以使用 Zip 的文件系统功能将所有资源存储在 1 个文件中吗?然后你可以解压到内存流中
  • 啊,如果这就是你所说的,那我猜不是。但是我需要内存中的文件吗?好吧,我稍后会尝试 MemoryStream 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2016-10-17
相关资源
最近更新 更多