Memory 使用Nancy流化(SqlFile-)流

Memory 使用Nancy流化(SqlFile-)流,memory,stream,nancy,sqlfilestream,Memory,Stream,Nancy,Sqlfilestream,我想知道如何通过Nancy API将(在我的例子中)SqlFileStream直接发送到客户机,而无需将流加载到内存中 到目前为止,我成功地传递了流,但是Nancy的StreamResponse将sourcestream(=SqlFileStream)复制到outputstream,这会导致大量内存增加。在那里我只想让它发送流通过 我在WebApi中完成了这项工作,其中WebApi在Owin管道中注册。 没有明显的内存增加,这在我们谈论相当大的流(>100MB)时非常好。 当然,如果可能的话,我

我想知道如何通过Nancy API将(在我的例子中)SqlFileStream直接发送到客户机,而无需将流加载到内存中

到目前为止,我成功地传递了流,但是Nancy的StreamResponse将sourcestream(=SqlFileStream)复制到outputstream,这会导致大量内存增加。在那里我只想让它发送流通过

我在WebApi中完成了这项工作,其中WebApi在Owin管道中注册。 没有明显的内存增加,这在我们谈论相当大的流(>100MB)时非常好。 当然,如果可能的话,我宁愿坚持使用一个API应用程序框架


有什么建议吗?

我想我找到了解决办法。最后做起来并不难

我创建了一个自定义Nancy.Response=>FlushingStreamResponse。 向它传递一个流和一个mimetype,当这是GET的结果时,会立即将流发送到客户端

public class FlushingStreamResponse : Response
{
    public FlushingStreamResponse(Stream sourceStream, string mimeType)
    {
        Contents = (stream) =>
        {
            var buffer = new byte[16 * 1024];
            int read;
            while ((read = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                stream.Write(buffer, 0, read);
                stream.Flush();
            }
            sourceStream.Dispose();
        };

        StatusCode = HttpStatusCode.OK;
        ContentType = mimeType;
    }
}
使用simple
Contents=ostream=>{sourceStream.CopyTo(ostream);ostream.Flush();}