0

我一直在尝试一些方法,并得到这个。

我真正需要的是像 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();
        }
    }
4

0 回答 0