使用本地 Visual Studio 负载测试在 ASP.NET MVC 和 IIS 中为 async/await 进行概念验证

Making a proof of concept for async/await in ASP.NET MVC and IIS using local Visual Studio Load Test

我创建了这两个动作:

public string Sync()
{
    Thread.Sleep(2000);
    return "Hello, Sync!";
}

public async Task<string> Async()
{
    await Task.Delay(2000);
    return "Hello, Async!";
}

我在 IIS 下托管它们 (Windows 10)。我使用 Visual Studio 2015 Ultimate 以本地环境作为实验室创建了负载测试。我正在对 100 个虚拟用户进行恒定模式测试。

我的期望是,当应用程序池的线程数少于 100 时,异步操作将获得更好的结果(更多测试 运行 和更好的平均页面响应时间)。但我得到相同的结果两个测试。两个测试都设置为 运行 1 分钟。

我尝试修改了很多选项。在 aspnet.config 中,我设置了以下设置:

我尝试设置为 8、12、100,同步和异步方法的结果始终相同:

17 秒平均页面时间 总测试:289 4.82Tests/Sec

知道我做错了什么吗?我希望异步方法的平均页面时间为 2 秒,因为不应阻塞任何线程。

I tried modifying plenty of options. In aspnet.config I set the following settings:

听起来你试图削弱 ASP.NET 以便异步版本领先。

只要线程不稀缺,async IO 就没有优势。它在 运行ning 时使用较少的线程和内存,但 CPU 使用率略高。 None 只要我们不在 100 个线程中,这个问题就很重要。

如果您想实际查看此操作 运行 1000 个并发请求。您看到不同之处。我不确定 "virtual users" 是什么,ASP.NET 不关心。重要的是parallelism/concurrency.

的有效程度

您可以想出任意高或低的差异。平均需要的线程数是 requestsPerSecond * requestDurationInSeconds.

我会 link 向您展示我关于是同步还是异步的标准帖子,因为我觉得您对异步 IO 何时合适并不绝对清楚。

为什么EF 6教程使用异步调用? 我们应该切换到默认使用异步 I/O 吗?

事实证明,非Windows 服务器版本的 IIS 有最多 10 个并发请求的限制:Does IIS 7 have limit of simultaneous requests?

我希望我早点知道这一点...但是,我希望它对以后的人有所帮助。