管理大型IStream的正确方法是什么?

pol*_*ara 7 c# com interop stream

我正在编写一个C#类库,使用IStream通过COM自动化传输大量数据.它使用CreateStreamOnHGlobal API调用来创建流,以及System.Runtime.InteropServices.COMTypes.IStream中的方法来使用它.

我的问题是,在传输大量数据时,控制内存占用的最佳方法是什么?将100MB以上的文件数据加载到内存中似乎很浪费,客户端应用程序需要等到该过程完成后再下载任何内容.

我的计划是创建一个合理大小的流并多次写入它.在编写下一个数据块之前,请回到开头并从头开始覆盖.我是否以正确的方式解决这个问题,是否有更好的方法来解决这个问题?

Zar*_*rat 0

对于大量数据的临时本地存储,内存映射文件通常是一个好主意。它将内存管理责任交给了最了解如何做到这一点的Windows。如果您没有指定文件,它将映射到分页文件中,并且除非有必要,否则永远不会访问物理磁盘。

如果您使用 .NET 4.0,您将获得一个用于内存映射文件的托管 API 。