我需要在从网络获取的数据库中保存一个文件(20 Mb - 300 Mb)。我需要在C#中使用快速解决方案,因此我需要在内存中缓冲以避免存储在临时文件系统位置。
但是只使用数组不是解决方案,因为我需要避免因堆碎而在内存中分配连续空间。这适用于具有并行用户访问权限的后端服务器。所以我无法在程序生命开始时预先分配空间。
标准框架中是否有一个C#类 - 就像内存中的流一样 - 基于类似于几个连续数组的非连续块的数据结构?是否有一个类可以自动使用非大块碎片存储器?
答案 0 :(得分:0)
我不知道提供此功能的当前系统库中的任何内容 - 您需要手动实现它。
你所追求的是"管道"项目(高性能系统的IO堆栈的重新加工)将实现。这个API非常实验性,没有特定的ETA,但是:
MemoryPool<byte>
(摘要)/ MemoryPool
(具体)提供租用连续内存块的API模型ReadOnlyBuffer
描述了来自多个块的多个切片上的包装器,将它们作为单个实体公开这个API现在非常不完整和实验,但可以使用。这就是ASP.NET MVC&#34; Kestrel&#34; http服务器建立在。目前还没有任何文档,但是我started this。
供参考,&#34;管道&#34;是最近的C#更改的灵感来源,包括ref this
,in
,in this
和ref struct
- 以及Span<T>
的JIT更改。所以:看起来很可能真的发生了。