async和await是否会提高ASP.Net应用程序的性能
我最近阅读了一篇关于c#-5
和新的和漂亮的异步编程function的文章。 我看到它在Windows应用程序中运行很好。 问题来了我是否这个function可以提高ASP.Net性能?
考虑这两个psudo代码:
public T GetData() { var d = GetSomeData(); return d; }
和
public async T GetData2() { var d = await GetSomeData(); return d; }
在ASP.Net中有两个代码区别吗?
谢谢
好吧,首先你的第二段代码将返回Task
而不是T
最终的答案是“它取决于”。
如果您的页面需要访问多个数据源,则可以更轻松地并行访问这些源,只在必要时使用每次访问的结果。 因此,例如,您可能希望开始将长时间运行的数据提取作为页面处理的第一部分,然后只需要最后的结果。 显然可以在不使用async / await的情况下执行此操作,但是当语言帮助您时,它会更简单。
此外,如果大多数请求在很多时候都处于空闲状态,例如在长轮询场景中,异步可用于处理少量线程上的大量长时间运行请求。 在某些情况下,我可以看到异步能力被用作SignalR的替代品。
服务器端async的好处比客户端更难确定,因为它有不同的帮助方式 – 而“避免在UI线程上工作”这一点非常明显,很容易看出它的好处。
不要忘记服务器端编码可能比前端更多。 根据我的经验,异步最有可能在实现RPC服务时很有用,特别是那些与多个其他 RPC服务通信的服务。
正如Pasi所说,它只是语法糖 – 但我相信它是足够甜的糖,它可能使正确的异步处理之间的差异变得可行,而且它只是太多的努力和复杂性。
定义’表现’。
最终,应用程序将执行与同步完成相同的工作量,这只是异步版本中的调用线程将等待操作在另一个上完成,而在同步模型中它是相同的线程执行任务。
最终,在这两种情况下,客户端都会等待相同的时间,然后才能看到来自Web服务器的响应,因此不会发现任何性能差异。
如果通过异步处理程序处理Web请求,那么响应仍将花费相同的时间返回 – 但是,您可以减少线程池的压力,使Web服务器本身在接受请求时更具响应性- 有关详细信息, 请参阅此其他SO 。
由于代码在服务器上执行,用户仍然需要等待响应,问题就像 – 异步调用比同步调用更快。
那么,这主要取决于服务器实现。 对于IIS和多个用户,每个用户将生成太multithreading(即使没有异步),异步也会效率低下。 但是如果用户数量很少,它应该更快。
一种方法是试试。
不。这些都是纯粹的语法糖,通过编写简单的代码并在修复错误时简单地读取代码,使您的程序员工作更轻松。
它确实允许更简单的方法来加载数据而不阻止UI,所以在某种程度上是,但不是真的。
如果你需要做多件事,它只会提高性能,这一切都可以在不需要任何其他信息的情况下完成。 否则你也可以按顺序完成它们。
就你的例子而言,答案是否定的。 无论如何,页面都需要等待每一页。
- 使用Image.FromFile不会释放文件句柄
- ItextSharp中的Pdf合并问题(合并Pdfs后不保留其值)
- 使用自定义角色在ASP.NET标识中初始化RoleManager
- 如何使用其.NET API的v3检索Google Analytics报告数据?
- 有没有办法拦截和修改asp.net中的html输出流,结合javascript?
- 当我尝试将数据插入文本框时,System.Data.dll中出现未处理的“System.InvalidOperationException”类型的exceptionexception
- WCF客户端使用多个使用HTTP Cookie的asmx服务
- 对HttpContext.Current.Session的静态引用是否为所有用户返回相同的会话?
- ASP.NET会话状态在Web.config以及Global.asax中不起作用