asp.net-mvc – 服务器上的等待时间仅在生产中很大
我有一个文件控制器负责处理块中的上传文件(1 MB块).我花时间在开发中测试它,一切都如预期.以下是操作的伪代码:
logger.Log("Getting InputStream"); var stream = Request.InputStream; // Here is the wait. logger.Log("Got InputStream"); var bytes = GetByteArray(stream); // This is always less than 1 MB. await FilesService.AppendToFileAsync(key,fileName,owner,bytes); // Write to the file. // The GetByteArray method private byte[] GetByteArray(Stream stream) { var bytes = new byte[stream.Length]; stream.Read(bytes,bytes.Length); return bytes; } 具体细节并不十分重要.我正在获取字节,然后我将它们附加到磁盘上的文件中. 然而,在生产中,事情变得奇怪. 通过记录我绝对知道所有的等待时间都花在了Request.InputStream道具上. 等待时间介于1分钟到3分钟之间. 我的问题 >这是否意味着服务器只花了那么多时间下载请求? (虽然我真的怀疑) 还有一个小问题:请求发送时间线告诉我何时在另一方收到内容字节? 我知道也许我应该写一个文件上传处理程序或者其他东西,但是这真的会产生很大的不同吗? 发生什么了? 编辑: 当然,我调查了许多看似相关的问题,但没有任何结果. >我首先怀疑appdomain是在每个chunk请求上被回收的(因为我正在写一个文件)但我确认这不是日志中的情况.它也没有任何意义,因为wait在Request.InputStream上. 编辑2: 我刚用GetBufferlessInputStream测试了同一个动作中的手动读取,结果是一样的.现在我确定等待是在读取请求流时.在这一点上,我感觉服务器获取请求的速度很慢.我联系了我的主人,他们说他们没有限制速度,也不应该很慢. 要确认这一点,这是我上传一个块时的日志之一: 2015-09-15 23:23:12.6419|Entered upload chunk // This is the action. 2015-09-15 23:23:12.6419|Got bufferless stream // var s = Request.GetBufferlessStream() 2015-09-15 23:23:12.6419|Stream length: 1048576 (1 MB) // s.Length 2015-09-15 23:23:12.6419|Reading stream... // Here is the wait,this time it was not much (~26 secs) but it's still a lot. 2015-09-15 23:23:38.8211|Read stream of size 1048576 bytes (1 MB) 这就是我读它的方式: var b = new byte[s.Length]; var read = 0; var c = 0; while ((c = s.Read(b,read,b.Length - read)) != 0) { read += c; } 解决方法
您应该更改计划,该服务器上有大量站点 参加高级计划以提高下载速度
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 使用javascript的Mvc ActionLink
- Asp.net mvc项目架构分享系列之架构概览 架构搭
- asp.net-mvc-4 – .NET MVC4 SimpleMembership错误 – “未
- asp.net-web-api – SignalR&WebApi – 碰撞Newtonsoft
- 有没有办法我仍然可以在我的ASP.NET MVC 2项目中使用app_of
- asp.net-mvc – DesignPatterns:哪个最适合用于向导式用户
- asp.net-mvc – ASP.NET MVC应用程序架构“指南”
- asp.net – 如何在迭代字典项时更新值?
- asp.net-mvc – 未设置localhost cookie
- 学习Asp.Net WebForms或Asp.Net MVC