是否存在不使用连续内存的开源MemoryStream实现?

时间:2012-03-14 16:35:41

标签: c# .net memorystream

Like GuyFawkes,我想使用MemoryStream存储大量数据,但仍然遇到“内存不足”的异常。
TomTom的答案是我想要做的 - 使用一个不需要连续块的实现 - 但我想知道是否已经有一个免费的实现,以节省我自己写一个?

有没有人知道可以使用大流的MemoryStream的免费重新实现?

编辑:

MemoryMappedFile解决方案非常有趣,我会记住它用于其他项目,但正如Henk所说,它偏离了MemoryStream所针对的抽象。具体而言,是已知容量的要求 替换者应处理的数据在某些情况下会非常大,但在其他情况下相对较小(并且我们不知道它将会是什么,直到为时已晚;));此外,该课程的许多实例将同时存在。 最终,使用MemoryMappedFiles(确定每个文件的适当大小)所需的工作将等同于实现TomTom解决方案的工作。

3 个答案:

答案 0 :(得分:3)

以下是我的实施,以防任何人需要它;我会暂时搁置这个问题以防万一有人仍然做出更好的回应。

http://www.codeproject.com/Articles/348590/A-replacement-for-MemoryStream

答案 1 :(得分:1)

您可以创建一个没有文件的MemoryMappedFile,即一个存在于系统内存中的文件。  DelayAllocatePages选项会延迟分配,直到实际需要内存为止。您需要提前指定最大容量。使用CreateViewStream Method创建一个流。

答案 2 :(得分:0)

不完全是MemoryStream的重新实现,但请考虑是否可以使用Memory Mapped File来满足您的要求。

内存映射文件可以解决大型内存缓冲区可以解决的许多类问题,非常高效,并且可以直接由.NET支持。