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

C# 是否有不使用连续内存的开源MemoryStream实现?,c#,.net,memorystream,C#,.net,Memorystream,,我想使用MemoryStream来存储大量数据,但不断遇到“内存不足”异常。 TomTom的答案是我想做的——使用一个不需要连续块的实现——但我想知道是否已经有一个免费的实现,让我自己编写一个 是否有人知道可以处理大数据流的MemoryStream的良好、免费的重新实现? 编辑: MemoryMappedFile解决方案非常有趣,我将在其他项目中记住它,但是正如Henk所说,它偏离了MemoryStream所追求的抽象。特别是已知容量的要求。 在某些情况下,替代者将处理的数据非常大,但在其他情

,我想使用MemoryStream来存储大量数据,但不断遇到“内存不足”异常。
TomTom的答案是我想做的——使用一个不需要连续块的实现——但我想知道是否已经有一个免费的实现,让我自己编写一个

是否有人知道可以处理大数据流的MemoryStream的良好、免费的重新实现?

编辑:

MemoryMappedFile解决方案非常有趣,我将在其他项目中记住它,但是正如Henk所说,它偏离了MemoryStream所追求的抽象。特别是已知容量的要求。
在某些情况下,替代者将处理的数据非常大,但在其他情况下,数据相对较小(不,我们不知道它将是什么,直到为时已晚;);此外,该类的许多实例将同时存在。
最后,使用内存MyFrdFrm文件(确定每一个合适的大小)所需的工作将等同于实现ToToM的解决方案。

不完全是内存流的重新实现,而是考虑是否可以使用A来满足您的需求。p> 内存映射文件可以解决许多大内存缓冲区可以解决的问题,它们非常有效,并且直接受.NET支持。

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

这是我的实现,以防任何人需要它;我会把这个问题留一点时间,以防有人仍然用更好的回答


AFAIK内存映射文件必须具有固定大小。是否确定?我非常确信,内存映射文件在您的进程中需要一块连续的虚拟地址空间。他们没有帮助解决这个问题。谢谢你和埃里克;我试图实现MemoryMappedFile解决方案,但它不太适合这种情况(我已经为问题添加了额外的细节进行解释)。这是否仍然需要与进程中相同数量的连续虚拟地址空间,因此没有解决这个问题吗?StringBuilder中的一个类似问题在.NET4中通过修改实现以使用rope得到了解决。谷歌搜索“memorystream rope”只会让程序员的点击率上升到最后。64位操作系统是100美元的解决方案。好吧,我把缺少(bar Eric和dtb的答案视为“不”,这两个答案很有趣,但不是我所需要的),所以我自己实现了它。这并不特别复杂,但如果有人能推荐最好的地方,我会上传它?@HansPassant,ropes是一本有趣的读物,感谢我的项目(即使谷歌搜索“memorystream rope”并不是很鼓舞人心!),尽管我只需要数百兆字节的流,所以在我的实现中有一个简单的列表就足够了。