这篇文章的主要内容来源于.NET文档,此处翻译前4条内容,其余内容会陆续贴出来git
尽可能使用缓存github
详情请查看:ASP.NET Core 中的响应缓存.api
了解”热代码路径”缓存
”热代码”定义为访问频繁而且耗时较长的代码。”热代码”对性能影响很明细。架构
避免使用阻塞调用并发
ASP.NET Core 程序应该被设计成同时处理多个请求。异步API使用一个小线程池能够处理上千个并发请求,而不会阻塞。这样请求线程能够去处理其余请求,而不是等待一个长时同步任务完成。异步
ASP.NET Core 程序的一个常见的性能问题是,阻塞了本该异步执行的调用。不少同步调用会致使线程池饥饿,增大相应时间。async
不要像下面这样作:性能
应该这样作:线程
性能分析器 PerfView,能够用来查找频繁加入线程池的线程。
Microsoft-Windows-DotNETRuntime/ThreadPoolWorkerThread/Start 代表一个线程加入了线程池。
返回IEnumerable<T> 仍是 IAsyncEnumerable<T>
若是Action Result返回IEnumerable<T>,那么序列化器以同步的方式处理集合迭代,这样阻塞调用可能会致使线程池饥饿,为避免同步迭代,可在返回迭代以前调用 ToListAsync()。
从ASP.NET Core 3.0开始,IAsyncEnumerable<T>做为异步枚举,可取代IEnumerable<T>。