C#Response.WriteFile与Response.TransmitFile文件大小问题

Pot*_*man 8 c# transmitfile

我在服务器上有一个5Mb的pdf,使用writeFile下载这个文件给我一个15Mb的下载,其中transmitfile给出正确的5Mb文件大小...

这是由于writeFile服务器上的某种内存未压缩?只是想知道是否有人看到同样的事情发生...

(ps因为我们去了iis7才发现它?)

代码是......

if (File.Exists(filepath))
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\"");
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString());

    //HttpContext.Current.Response.WriteFile(filepath);
    HttpContext.Current.Response.TransmitFile(filepath);

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
}
Run Code Online (Sandbox Code Playgroud)

kd7*_*kd7 7

TransmitFile - 将指定文件直接写入HTTP响应输出流,而不在内存中缓冲它.

WriteFile - 将指定文件直接写入HTTP响应输出流.

我会说发生差异是因为传输文件没有缓冲它.写文件使用缓冲(Afiak),基本上是在传输数据之前暂时保存数据,因此无法猜测准确的文件大小,因为它以块的形式写入.