使用本地Visual Studio负载测试对ASP.NET MVC和IIS中的异步/等待进行概念验证

本文关键字:异步 IIS 等待 验证 MVC Visual Studio 负载 NET ASP 测试 | 更新日期: 2023-09-27 18:27:03

我创建了这两个操作:

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,12100,同步和异步方法的结果总是一样的:

平均页面时间17秒测试总数:2894.82测试/秒

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

使用本地Visual Studio负载测试对ASP.NET MVC和IIS中的异步/等待进行概念验证

事实证明,非Windows Server版本的IIS最多有10个同时请求的限制:IIS 7有同时请求的上限吗?

我希望我早点知道。。。但是,我希望这对将来的某个人有所帮助。

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

听起来你试图削弱ASP.NET,这样异步版本就领先了。

只要线程不稀少,异步IO就没有优势。它在运行时使用更少的线程和更少的内存,但CPU使用率略高。只要我们不在100年代,这些都无关紧要。

如果您想看到这一点,请运行1000个并发请求。您看到差异。我不知道什么是"虚拟用户",ASP.NET也不在乎。重要的是并行/并发的有效程度。

你可以任意制造高或低的差异。所需的平均线程数为requestsPerSecond * requestDurationInSeconds

我会把我关于是同步还是异步的标准帖子链接给你,因为我觉得你不清楚什么时候异步IO是合适的。

https://stackoverflow.com/a/25087273/122718为什么EF 6教程使用异步调用?https://stackoverflow.com/a/12796711/122718我们是否应该默认切换为使用异步I/O?