当前位置: 首页 > 知识库问答 >
问题:

MVC控制器的异步与同步基准测试

罗韬
2023-03-14

我使用ASP.NET MVC4中的异步方法设置了这篇MSDN文章中的示例,并进行了一些基准测试,看看我会得出什么结论。

  • Windows 7 Professional(x64)
  • IIS 7.5
  • 英特尔酷睿i7-2600S@2.80HGz
  • 8GB内存
  • Apppool>最大辅助进程数:10

我设置了两个控制器syncAsync,并使用加载器工具进行了一些测试。加载器工具在一分钟内只发送50-60个常量请求。每个控制器调用相同的webservice 3次。每个代码如下:

public ActionResult Sync()
{
    var g1 = GetGizmos("url1");
    var g2 = GetGizmos("url2");
    var g3 = GetGizmos("url3");
    return Content("");
}
    
public object GetGizmos(string uri)
{
    using (WebClient webClient = new WebClient())
    {
        return JsonConvert.DeserializeObject(
         webClient.DownloadString(uri)
        );
    }
}

public async Task<ActionResult> Async()
{
    var g1 = GetGizmosAsync("url1");
    var g2 = GetGizmosAsync("url2");
    var g3 = GetGizmosAsync("url3");
    var a1 = await g1;
    var a2 = await g2;
    var a3 = await g3;  
    return Content("");
}


public async Task<object> GetGizmosAsync(string uri)
{            
    using (HttpClient httpClient = new HttpClient())
    {
        var response = await httpClient.GetAsync(uri);
        return (await response.Content.ReadAsAsync<object>());
    }
}
    

System.Net.ServicePointManager.DefaultConnectionLimit = 1000;

共有1个答案

水麒
2023-03-14
webClient.DownloadString(uri)

var response = await httpClient.GetAsync(uri);
return (await response.Content.ReadAsAsync<object>());

也许你可以试试

webclient.DownloadStringAsync(uri)

您可以优化异步代码以

await Task.Run(() => {
    // just run your sync code here
    var g1 = GetGizmos("url1");
    var g2 = GetGizmos("url2");
    var g3 = GetGizmos("url3");
    return Content("");
});
 类似资料:
  • 问题内容: 由于Servlet 3.0 支持异步处理。使用始终异步处理会更好吗?或者在什么情况下同步处理更好? 问题答案: 异步Servlet带来的最大好处是HTTP push ,在该服务器中,服务器可以在选择时向客户端发送信息,而不是在客户端请求时将信息发送回客户端。在异步Servlet之前,这将需要长时间运行的HTTP连接,每个HTTP连接都会束缚服务器线程,这是非常低效的。这个新模型使服务器

  • 主要内容:同步时钟,实例,实例,异步时钟关键词: 同步,异步 由第 3 章可知,当触发器输入端的数据和触发器的时钟不相关时,很容易导致电路时序不满足。本章主要解决模块间可导致时序 violation 的异步问题。 关于异步与同步的定义,许多地方都有介绍,细节上也有所差异。本章主要的关注点是解决异步问题的方法,而不关心为什么会出现异步时钟,也不关心异步电路的具体结构,仅从异步时钟的时序结果去分析解决问题。 同步时钟 数字设计中,一般认为,

  • 异步控制(Sync Controller) 概述 众所周知,在分布式计算系统中,由于多个计算节点计算进度不可能完全一致,会导致了在汇总结果时需要等待那些计算速度较慢的节点,即慢节点会拖慢整个计算任务的进度,浪费计算资源。 考虑到机器学习的特殊性,系统其实可以适当放宽同步限制,没有必要每一轮都等待所有的计算节点完成计算,部分跑得快的Worker,其实完全可以先把训练好的增量Push上去,然后进行下一

  • 一个问题是,我必须使整个ActionMethod异步,我不确定这会有什么影响。当前同步的基本模式如下: 有什么想法吗?

  • 在我看来,将myObject序列化为JSON和f的Spring代码将同时尝试在get()返回时访问myObject。除了返回MyObject的深度副本之外,还有什么方法可以防止这种情况发生吗?

  • 根据我的测试计划,如果我的理解正确,那么第一个用户将登录,请求将继续发送到User1的“if controller”。在这里,请求将等待,直到5个请求按照同步计时器中的设置排队,所有5个请求将一次性发送到服务器。然后第二个用户将登录,第二个用户的请求将被处理,依此类推。 如果未使用同步计时器,则上述测试计划将成功执行。一旦我使用了同步计时器,我的测试计划就会无限期地继续执行。 根据我对同步计时器的