MemoryStream替代大数据量

And*_*ndy 2 .net c# memorystream stream

如果数据很大且进程是32位,那么当使用.Net MemoryStream时,我遇到内存不足异常的问题.

我相信System.IO.Packaging API在数据量增加时从内存静默切换到文件支持的存储,从表面上看,似乎可以实现完全相同的MemoryStream的子类事情.

有谁知道这样的实现?我很确定框架本身没有任何东西.

Han*_*ant 7

程序员努力避免使用文件.在Windows中,内存和文件之间的差异非常小.用于MemoryStream的任何内存实际上都需要一个文件.存储由页面文件c:\ pagefile.sys支持.反之亦然,您使用的任何文件都由内存支持.文件数据由文件系统缓存缓存在RAM中.因此,如果机器有足够的RAM,那么如果使用FileStream,实际上只能从/向内存读写.并获得你期望使用内存的性能.它完全免费,您不必编写任何代码来启用此功能,也不必管理它.

如果机器没有足够的RAM,那么它会以同样的方式恶化.当您使用MemoryStream时,页面文件开始被废弃,您将被磁盘放慢速度.当您使用文件时,数据将不适合文件系统缓存,您将被磁盘放慢速度.

你当然会得到使用文件的好处,你不会再耗尽内存了.请改用FileStream.

  • -1 我认为这个答案中有很多点是完全错误的,但为了空间的利益,我只会挑战这一点:“因此,如果机器有足够的 RAM,那么您实际上只会读取和写入/如果您使用 FileStream 到内存中”。这绝对不是真的。我目前正在做一个项目,我正在一个超过 50 GB RAM 的系统上向 FileStream 写入 3 GB。我可以告诉你一个事实,它被持续地保存到磁盘。而 MemoryStreams 不是。 (3认同)