Asp.net mvc 只有在生产环境中,服务器上的等待时间才比较长

Asp.net mvc 只有在生产环境中,服务器上的等待时间才比较长,asp.net-mvc,jquery-file-upload,iis-8.5,Asp.net Mvc,Jquery File Upload,Iis 8.5,我有一个文件控制器,负责以块(1MB块)的形式处理上传的文件。我花时间在开发中测试了这个,一切都如预期的那样。以下是操作的伪代码: 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

我有一个文件控制器,负责以块(1MB块)的形式处理上传的文件。我花时间在开发中测试了这个,一切都如预期的那样。以下是操作的伪代码:

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;
}
具体细节并不十分重要。我获取字节,然后将它们附加到磁盘上的文件中

然而,在生产中,事情变得很奇怪。 这是正在上载的一个区块的请求时间线(在生产中):

通过日志记录,我完全知道所有的等待时间都花在了
Request.InputStream
prop中

等待时间介于1分钟到3分钟之间

我的问题
  • 这是否意味着服务器只是花了那么多时间下载请求?(尽管我真的很怀疑)
  • 还是我在这里做错了什么
还有一个小问题:
请求发送的时间线是否告诉我内容字节何时在另一端完成接收

我知道也许我应该编写一个文件上传处理程序或其他东西,但这真的有那么大的区别吗

那么,发生了什么事

编辑: 当然,我研究了很多看似相关的问题,但没有一个是中肯的

  • 我首先怀疑appdomain在每个区块请求中都被回收(因为我正在向一个文件写入),但我从日志中确认情况并非如此。而且,这也没有任何意义,因为等待是在
    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;
}

您应该更改计划,该服务器上有大量站点
加入高级计划以提高下载速度

您的网络是否还有其他问题?病毒扫描或其他会使这成为一个外部问题(与您的代码没有直接关系)?@Igor我一直在测试这个问题超过几天,这似乎不是暂时的。病毒扫描,这肯定是不可能的,因为就像我说的,等待总是在获取
请求.InputStream
中。我唯一能想到的是,我做得完全错误。也许是小片上传和InputStream的组合在起作用。@Igor我100%确定问题不在IO部分。正如我所说,通过日志记录,我确认等待完全在
请求.InputStream
中。另外,请检查编辑。在一些搜索之后,我找不到任何其他内容,因此我认为在GetByteArray方法中查看Request.InputStream的操作可能仍然有用。你能发布你的GetByteArray方法的主体吗?