Memory 使用Nancy流化(SqlFile-)流
我想知道如何通过Nancy API将(在我的例子中)SqlFileStream直接发送到客户机,而无需将流加载到内存中 到目前为止,我成功地传递了流,但是Nancy的StreamResponse将sourcestream(=SqlFileStream)复制到outputstream,这会导致大量内存增加。在那里我只想让它发送流通过 我在WebApi中完成了这项工作,其中WebApi在Owin管道中注册。 没有明显的内存增加,这在我们谈论相当大的流(>100MB)时非常好。 当然,如果可能的话,我宁愿坚持使用一个API应用程序框架Memory 使用Nancy流化(SqlFile-)流,memory,stream,nancy,sqlfilestream,Memory,Stream,Nancy,Sqlfilestream,我想知道如何通过Nancy API将(在我的例子中)SqlFileStream直接发送到客户机,而无需将流加载到内存中 到目前为止,我成功地传递了流,但是Nancy的StreamResponse将sourcestream(=SqlFileStream)复制到outputstream,这会导致大量内存增加。在那里我只想让它发送流通过 我在WebApi中完成了这项工作,其中WebApi在Owin管道中注册。 没有明显的内存增加,这在我们谈论相当大的流(>100MB)时非常好。 当然,如果可能的话,我
有什么建议吗?我想我找到了解决办法。最后做起来并不难 我创建了一个自定义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;
}
}
使用simpleContents=ostream=>{sourceStream.CopyTo(ostream);ostream.Flush();}