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, 0, bytes.Length);
    return bytes;
}

具体细节并不十分重要.我正在获取字节,然后我将它们附加到磁盘上的文件中.

然而,在生产中,事情变得奇怪.
这是上传一个块(生产中)的请求时间线:
《asp.net-mvc – 服务器上的等待时间仅在生产中很大》

通过记录我绝对知道所有的等待时间都花在了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;
}

最佳答案 您应该更改计划,该服务器上有大量站点

参加高级计划以提高下载速度

点赞