我一直在尝试一些方法,并得到这个。
我真正需要的是像Response.TransmitFile(或MVC File方法,它使用后面的TransmitFile)。但是使用FileShare.ReadWrite而不是Read。
我正在使用2GB文件进行测试。 TransmitFile没有内存或CPU占用空间。
我尝试做类似的事情,但我不知道我是否走在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpu
private void Download(string caminho)
{
const int tamanhoBuffer = 8192;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename*=UTF-8''" + Path.GetFileName(caminho) + "");
using (var fs = new FileStream(caminho, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
Response.AddHeader("Content-Length", fs.Length.ToString());
byte[] conteudo = new byte[tamanhoBuffer];
int size;
while (Response.IsClientConnected && (size = fs.Read(conteudo, 0, conteudo.Length)) > 0)
{
Response.OutputStream.Write(conteudo, 0, size);
Response.Flush();
}
Response.End();
}
}