【发布时间】:2012-04-20 12:10:44
【问题描述】:
想象一个通过组合和/或编辑其他文件来创建大文件的应用程序。 例如,一个应用程序:
- 打开图像存档
- 添加或替换部分图片
- 更改现有图像的部分内容
- 使用生成的图像集创建新存档
可以按任何顺序添加/替换/更改图像,因此直到执行结束才能创建新存档。
天真的方法是为原始存档中的每个图像创建一组MemoryStream 对象,然后在需要时更改/删除/替换流,然后将该组写入新存档。这种方法可能会在执行速度方面给出最好的结果。
问题很明显:并不总是有足够的内存来保存一组流。
在这种情况下你会推荐什么?
我想我应该用一些速度换取内存,并使用某种临时的非内存存储。不过,我不确定要使用什么。
我应该使用内存映射文件吗?还是带有某种创建和删除机制的普通旧临时文件?也许还有别的?
【问题讨论】:
-
您对性能有什么要求吗?我很想去寻找普通的临时文件(可能存储在嵌套结构中以避免许多小文件变慢)并从那里开始。如果您隐藏在适当的界面后面,您以后随时可以改变主意!
-
你考虑过使用微软的 Esent 吗? Wiki 页面:en.wikipedia.org/wiki/Extensible_Storage_Engine ESENT 托管 .Net 库:managedesent.codeplex.com
-
@JeffFoster 当然,我希望尽可能保持速度。除此之外,我没有特殊的性能要求。
-
@YS。我以前从未听说过。谢谢,我去看看。
标签: c# optimization memory-management large-files