我有ASP.NET应用程序,允许用户在输入密码时下载文件。我使用下面的代码将文件发送给用户:
Context.Response.Clear();
Context.Response.ContentType = "application/pdf";
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Context.Response.BinaryWrite(File.ReadAllBytes(fileName));
Context.Response.Flush();
Context.Response.Close();
问题是如果文件超过1mb或者许多用户同时下载文件,则下载速度会变得非常慢。有可能以某种方式优化代码以获得更好的性能吗?
答案 0 :(得分:2)
您可以使用Response.TransmitFile(/* Your file */);
代替Response.BinaryWrite(/* Your file */);
TransmitFile() - Method将数据写入HTTP输出流,而不将其存储在内存中。
答案 1 :(得分:1)
为什么要手动管理下载?为什么不在成功登录后显示的页面上放置相应PDF文件的链接?这将释放ASP.NET线程,因此您不必使用它们来管理文件下载。 IIS仍然需要提供服务,但我认为这会显着降低您的开销。
您是否担心文件名被暴露?如果是,请回复 - 您可以探索其他一些选项。