下载期间的ASP.net内存使用情况
发布时间:2020-12-15 19:56:08 所属栏目:asp.Net 来源:网络整理
导读:在我工作地点的ASP.net站点上,以下代码块负责处理文件下载(注意:此处未使用Response.TransmitFile,因为下载的内容是从zip文件流式传输的): private void DownloadFile( Stream stream){ int bytesRead; int chunkSize = 1048576; //1MB byte[] readBuffer
在我工作地点的ASP.net站点上,以下代码块负责处理文件下载(注意:此处未使用Response.TransmitFile,因为下载的内容是从zip文件流式传输的):
private void DownloadFile( Stream stream) { int bytesRead; int chunkSize = 1048576; //1MB byte[] readBuffer = new byte[chunkSize]; while ((bytesRead = stream.Read(readBuffer,readBuffer.Length)) != 0) { if(!Response.IsClientConnected) break; byte[] chunk = new byte[bytesRead]; Array.Copy(readBuffer,chunk,bytesRead); Response.BinaryWrite(chunk); Response.Flush(); } stream.Close(); } 我们的用户经常下载数百MB的文件,这可以很快地咀嚼服务器内存.我的假设是这是由于响应缓冲.那有意义吗? 我刚刚读到了Response对象的’buffer’属性.如果我将其设置为false,是否会阻止Response.BinaryWrite()调用缓冲内存中的数据?一般来说,在这种情况下限制内存使用的好方法是什么?也许我应该从zip流式传输到临时文件,然后调用Response.TransmitFile()? 编辑:除了可能的解决方案,我对上面代码中存在的内存使用问题的解释非常感兴趣.为什么这会消耗远远超过1MB,即使在每次循环迭代时调用Response.Flush?它只是在每次循环迭代时发生的不必要的堆分配(并且不会立即得到GC),或者还有其他工作吗? 解决方法
这是我正在为此工作的一些代码.它使用8000字节缓冲区以块的形式发送文件.对大文件进行的一些非正式测试显示分配的内存显着减少.
int BufferSize = 8000; FileStream stream = new FileStream(fileName,FileMode.Open,FileAccess.Read); try { long fileSize = stream.Length; long dataLeftToRead = fileSize; int chunkLength; buffer = new Byte[BufferSize]; while (dataLeftToRead > 0) { if (!Response.IsClientConnected) { break; } chunkLength = stream.Read(buffer,BufferSize); Response.OutputStream.Write(buffer,chunkLength); Response.Flush(); dataLeftToRead -= chunkLength; } } finally { if (stream != null) { stream.Close(); } 编辑以修复语法错误和缺失值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 在Load事件中使用LoadControl的陷阱
- asp.net-core – 为什么要在ASP.NET Core中使用完整的.NET
- ASP.NET核心:如何获取远程IP地址?
- 自KB4338419以来,无法再从Classic ASP创建C#COM对象
- asp.net – Visual Studio源代码控制/版本控制,Vault与Git(
- asp.net – __doPostBack在DotNetNuke网站上未定义为IE 10
- asp.net – 当HttpContext属性返回null时如何检索?
- asp.net-mvc – 在ASP.NET MVC中添加服务引用4
- asp.net-mvc – 用于MVC文件上传的Bootstrap进度条
- asp.net – 按钮可以验证更多验证组吗?
推荐文章
站长推荐
- .Net core webapi使用httpClient发送异步请求遇到
- asp.net-mvc – MVC DateTime文本框格式化问题
- asp.net – ORA-01036:非法变量名/号C#(SqlData
- 将asp mvc3不显眼验证与jquery验证插件混合使用
- asp.net-mvc – 如何让ASP.NET MVC遵守我的custo
- ASP.Net MVC文件上传后期参数
- asp.net – 如何使用Eval在数据绑定控件中调用扩
- asp.net-mvc – ASP.NET MVC 3 – 你想看什么功能
- asp.net – .NET 4.5中的样式包和CSS中的图标
- asp.net – ASP .NET AJAX和JQuery
热点阅读