是否有用于缓冲大文件的.NET类?

时间:2018-01-18 05:24:09

标签: .net optimization

我需要在从网络获取的数据库中保存一个文件(20 Mb - 300 Mb)。我需要在C#中使用快速解决方案,因此我需要在内存中缓冲以避免存储在临时文件系统位置。

但是只使用数组不是解决方案,因为我需要避免因堆碎而在内存中分配连续空间。这适用于具有并行用户访问权限的后端服务器。所以我无法在程序生命开始时预先分配空间。

标准框架中是否有一个C#类 - 就像内存中的流一样 - 基于类似于几个连续数组的非连续块的数据结构?是否有一个类可以自动使用非大块碎片存储器?

1 个答案:

答案 0 :(得分:0)

我不知道提供此功能的当前系统库中的任何内容 - 您需要手动实现它。

你所追求的是"管道"项目(高性能系统的IO堆栈的重新加工)将实现。这个API非常实验性,没有特定的ETA,但是:

  • MemoryPool<byte>(摘要)/ MemoryPool(具体)提供租用连续内存块的API模型
  • ReadOnlyBuffer描述了来自多个块的多个切片上的包装器,将它们作为单个实体公开

这个API现在非常不完整和实验,但可以使用。这就是ASP.NET MVC&#34; Kestrel&#34; http服务器建立在。目前还没有任何文档,但是我started this

供参考,&#34;管道&#34;是最近的C#更改的灵感来源,包括ref thisinin thisref struct - 以及Span<T>的JIT更改。所以:看起来很可能真的发生了。