【发布时间】:2015-09-21 05:33:41
【问题描述】:
我有多个 ajax 请求正在进行(其中 5 个)。他们做不同的事情,但最后都是从数据库中获取数据。 如果在某个特定时间只有一个呼叫,则它们不会超过一秒钟。它们都是相似的,无论我叫什么,只要它是唯一运行的请求,在最坏的情况下(通常大约 700 毫秒)不会超过 1-2 秒。 但我同时有仪表板页面和 5 个请求。如果我打开 chrome 调试器,我可以看到:
好的,从浏览器的角度来看,这些请求似乎是异步的,所以我决定使用异步 Web api 方法。它们看起来像这样:
public async Task<List<NightsSoldGraphInfo>> NightsSold(
[FromUri]NightsSoldGraphCriteria criteria)
{
CompressResponse();
var results = await statisticsRepository.GetNightsSoldGraphData(UserPK, criteria);
return results;
}
GetNightsSoldGraphData 存储库方法如下所示:
public async Task<List<NightsSoldGraphInfo>> GetNightsSoldGraphData(
PrimaryKey userPk,
NightsSoldGraphCriteria criteria)
{
return await Task.Run(() =>
{
using (ADatabase db = new ADatabase(connectionString))
{
//SOME DATABASE STUFF
}
}
}
我将 3 个调用转换为异步版本,我认为我应该注意到性能提升。如何使每个调用大约花费一秒钟(如果这是单独运行每个请求所花费的时间)
这是我在单独运行此方法时得到的结果(当其他所有内容都已加载并且用户只需更改 nights sold 过滤器以获取过滤后的数据时) 500 毫秒。很好。但是,当它们对服务器进行多个 ajax 调用时,如何使其达到 500 毫秒?为什么在第一个示例中需要 5 秒?
是不是因为我使用 session 来获取用户数据,注意 UserPK 是访问 session 的变量?
【问题讨论】:
标签: c# asp.net-web-api async-await task-parallel-library c#-5.0