ASP.NET 表现不一致

ASP.NET inconsistent performance

分辨率

我决定尝试不同的负载测试工具 Apache Bench,结果明显不同。 AB 没有显示任何减速,save.ashx 处理程序的吞吐量现在处理大约 1200 requests/second。所以经过几天的测试,负载测试工具出了问题。 ASP.NET 和 IIS 都很好。

原始问题

我正在构建一个 ASP.NET 站点,旨在在很短的时间内从 HTTP 帖子中收集大量数据。想想超级碗广告的形式注册。不涉及实际的页面查看,所有这些都在单独的系统上处理。

为了尽可能简单,我使用通用处理程序 (ashx) 来捕获表单注册数据。处理程序只读取一些表单值并将数据写入静态 ConcurrentQueue。代码本质上是这样的:

public void ProcessRequest(HttpContext context)
{
    var formSubmission = new FormSubmission();
    var form = context.Request.Form;
    formSubmission.EmailAddress = form["EmailAddress"];
    formSubmission.PostalCode = form["PostalCode"];

    FormSubmissionQueue.Queue.Enqueue(formSubmission);
    context.Response.End();
}

当我尝试使用大量并发连接 (500) 对其进行负载测试时发生了什么,前 100-200 篇帖子被快速处理,然后一切都暂停了片刻,然后又进行了一次快速批处理,然后稍作暂停等

我已经尝试对站点进行概要分析,但没有取得多大成功,我开始认为速度变慢与垃圾收集或线程相关,但不知道确切的位置。我在 IIS Express (8.1) 和 Azure 网站上看到相同的行为。

任何人都可以建议查看位置或调整设置吗?我只是在 IIS 可以做的事情的极限吗?在我的本地计算机 (Surface Pro i5) 上,我在大约 4-5(编辑,现在是 1.5)秒内完成了所有 500 个帖子。

问题最终出在我使用的负载测试工具上。见上面问题中的注释。