Microsoft Learn
learn.microsoft.com › en-us › aspnet › core › fundamentals › best-practices
ASP.NET Core Best Practices | Microsoft Learn
ASP.NET Core apps should be designed to process many requests simultaneously. Asynchronous APIs allow a small pool of threads to handle thousands of concurrent requests by not waiting on blocking calls.
Syncfusion
syncfusion.com › blogs › asp.net core › performance tuning in asp.net core: best practices for 2026
Performance Tuning in ASP.NET Core: Best Practices for 2026 | Syncfusion Blogs
1 week ago - TL;DR: Supercharge ASP.NET Core 10 apps with five key optimizations: cut asset sizes by up to 92% using MapStaticAssets, accelerate caching with HybridCache, enforce rate limiting and timeouts for stability, slim Blazor bundles with AOT and WasmStripILAfterAOT, and track performance in real time with expanded metrics.
How fast is really ASP.NET Core?
"how fast is asp.net core really?" More on reddit.com
How fast is really ASP.NET Core?
Tl;dr?
More on reddit.comHow fast is really ASP.NET Core?
The TechEmpower Benchmarks suffer from the fact that there's a lot of "cheating". Looking at the Go benchmarks (which the author didn't dive into quite enough), many are allocating a pool of structs and then just filling in a struct in order to avoid the garbage collector. In fact, I would say that the Go/atreugo fortunes benchmark violates the TechEmpower rules. The list data structure must be a dynamic-size or equivalent and should not be dimensioned using foreknowledge of the row-count of the database table. The Go/atreugo benchmark sizes the lists so that they won't need to be resized at runtime (so that they can avoid the copying and garbage collection). Go/atreugo is fast when you already know the size of the collection and size your lists appropriately and you effectively turn off the garbage collector by never releasing the memory that gets allocated. We know that the fortunes database has 12 elements in it and a 13th element is added at runtime. With the .NET tests, a new List() is created and the default capacity will be 4. When the 5th element is added, a capacity of 8 will be allocated, the 4 will be copied and the 5th added. When the 9th is added, a capacity of 16 will be allocated and the 8 copied... Should the .NET code be updated to be new List(16)? That's what the Go code is doing. Likewise, would the .NET implementation be faster if they didn't actually release the allocated lists and cause garbage collection? They could simply keep the lists and objects around and fill them rather than re-allocate. var fortuneList = fortuneListPool.Get() int i = 0; while (dataReader.Read()) { var fortune = fortunePool.Get() fortune.Id = dataReader.GetInt32(0); fortune.Message = dataReader.GetString(1); fortuneList[i++] = fortune; } https://github.com/TechEmpower/FrameworkBenchmarks/blob/e6eee12a57aa2c575db98e6bbe01a371bda25a7a/frameworks/CSharp/appmpower/src/RawDb.cs#L81 https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/Go/atreugo/src/views/views.go#L99 That's what the Go code is doing to avoid memory allocation (which is expensive in Go since it's a non-compacting GC) and garbage collection - in addition to avoiding the list resizing. The problem is that the TechEmpower benchmarks aren't realistic - because the requirements don't evolve over time like any real-world app does. In the real world, you need to balance productivity with optimization. In the TechEmpower benchmarks, communities looking to win bragging rights can just over-fit the test. One of the things that becomes really obvious with the Go tests is that so much of your performance depends on how much you cheat. With all due respect to Sébastien Ros, with Go it doesn't depend on which framework you choose as much as he seems to imply in his comment. Even non-cheating things end up depending on library choices that have nothing to do with the framework. For example, Go/atreugo chooses to use QuickTemplate for templates which compiles the templates to Go code at compile-time. That makes their Fortunes implementation a lot faster than Gin which uses Go's built-in runtime-interpreted templating engine. https://github.com/SlinSo/goTemplateBenchmark Go's built-in templating takes 8.628 µs/op with 35 allocations per op. By comparison, QuickTemplate takes 0.181 µs/op with zero allocations. Is atreugo faster than Gin or did atreugo just choose a templating engine that's 48x faster and does zero memory allocation? I'm not saying that's cheating - I think that QuickTemplate arguably has better ergonomics than Go's built-in templating system. However, it means that we don't actually know whether atreugo is faster than Gin. We just know that the atreugo test choose a faster templating library (neither comes with templating in the framework). One of the issues with some of the Golang frameworks and benchmarks is that they use fasthttp which doesn't completely do http and a lot of the Go community thinks it should never be used. Go/atreugo uses fasthttp. The problem with benchmarks is that you can always get into arguments about what is legitimate or fair. I think QuickTemplate is very fair to use. I don't think it's fair to pre-allocate memory and effectively turn off the garbage collector. Others might disagree with me. If we leave implementations up to framework fanboys, we'll get over-fitted implementations meant to avoid all the problems in their framework/language. If we have a single implementer, the language/framework they're most comfortable with will have a distinct advantage. While the article doesn't delve into Python and PHP, I think some of the performance there shows "how much have we avoided having Python and PHP process things that can be done in C libraries?" PHP's standard library is mostly highly-optimized C functions. When you start having real business logic in your app, you end up doing a lot more in PHP which starts to dominate the time used. The more realistic the PHP app, the slower it'll become. The more micro-benchmark a PHP app, the more it can avoid doing any PHP. I don't want to sound too down on PHP here. In many ways, this strategy made PHP the major language it is today. Back in 2005, you could lean on the extremely well-optimized C functions and get performance out of really weak hardware. It could be embedded in the Apache web server with mod_php and because it included all the things you needed for a web program, you didn't need to include a lot of costly libraries. You could do things like mysql_fetch_assoc("MY SQL QUERY") and get an associative array (dictionary/hashmap) back and it'll be super fast. Then you'd just render that data. However, when you layer a lot of PHP code in (and do a lot of processing in PHP), things get really slow really fast. Laravel is dreadfully slow with the same performance as Ruby on Rails in these tests - even though other PHP tests will out-do Rails and Laravel by 20-40x. With the ASP.NET tests, we see the fastest outrunning the full ASP.NET/MVC/EntityFramework by 2.9x. Part of that is that we know the MVC routing is a bit slow. I believe Microsoft was hoping to close the gap between the minimal and MVC routing with .NET 7, but I haven't looked into it. Gin and Echo are the two Golang frameworks that are most used by the community. They both come out slower than ASP.NET in the TechEmpower benchmarks, but again I'd say that part of that is a bad implementation on Gin's part. Gin shouldn't be using the built-in Golang templates for their test. I think to really make a comparison, one needs to isolate what things are actually causing bottlenecks. Is it the template engine? Is it memory allocation for the objects/structs? Is it list-resizing? Is it GC? And then you have to have a realistic discussion about what can be avoided in idiomatic code where engineers are still productive and you aren't wasting resources just because it's a short-lived benchmark. Is it fair to say that you should never create a pre-allocated pool of structs? Maybe not. That rule would favor a language with a generational GC where short-lived objects are easily discarded (compared to Go's non-generational GC). But so much of this requires deep understanding of the languages and frameworks involved. I've already touched on things like different memory allocation, GC behavior, template engines, what C libraries might be available in certain ecosystems to avoid processing in the language itself, etc. But that's so hard because it requires a ton more work than people want to put into a fair comparison. More on reddit.com
Is asp.net core a good choice for backend, in the today industry?
How to improve the performance of ASP.NET Core?
To improve the performance of ASP.Net core, invest in best development practices such as avoiding blocking calls, caching, minimizing large object allocations, optimizing I/O and data access, minimize exceptions, and compress responses, etc.
biztechcs.com
biztechcs.com › home › blog › asp.net core performance best practices: speed up your apps
ASP.NET Core Performance Best Practices | Optimization Guide | ...
Which is better ASP.NET or ASP.NET Core?
Both are based on MVC (Model, View, Controller) architecture and perform seamlessly. However, the support for modular architecture and robust cloud support makes ASP.Net core a preferable choice in many occasions.
biztechcs.com
biztechcs.com › home › blog › asp.net core performance best practices: speed up your apps
ASP.NET Core Performance Best Practices | Optimization Guide | ...
Is ASP.NET Core faster than node JS?
The built-in IIS server kernel caching in ASP.Net core makes the process of CPU rendering much more simpler here. Thus, even if your application performs CPU-intensive tasks, ASP.Net core is capable of performing much faster compared to Node JS.
biztechcs.com
biztechcs.com › home › blog › asp.net core performance best practices: speed up your apps
ASP.NET Core Performance Best Practices | Optimization Guide | ...
Videos
02:03
Improve Performance in ASP NET Core APIs - YouTube
02:38
I Compared ASP.NET Core and Node.js for Performance - YouTube
11:29
Boost ASP.NET Performance with Response Caching 🔥 - YouTube
12:28
🔥 Boost Your ASP.NET Core Web API Performance with In-Memory ...
02:34
Improve ASP.NET Core Web API Performance and Resilience - YouTube
24:53
What's New in ASP.NET Core - YouTube
Microsoft Learn
learn.microsoft.com › en-us › aspnet › core › performance › overview
ASP.NET Core performance | Microsoft Learn
May 6, 2025 - ASP.NET Core Blazor performance best practices · ASP.NET Core Best Practices · Overview of caching in ASP.NET Core · Rate limiting middleware in ASP.NET Core · Memory management and patterns in ASP.NET Core · Scaling ASP.NET Core Apps on Azure · Object reuse with ObjectPool in ASP.NET Core ·
C# Corner
c-sharpcorner.com › article › 10-tips-to-improve-performance-of-asp-net-core-application
10 Tips To Improve Performance Of ASP.NET Core Application
March 10, 2019 - Keeping the data in that location from where we can get it frequently without making the call to the server is a good practice. Here, we can use the Cache. Caching the content helps us to reduce server calls again and again and it helps us to increase the performance of the application. We can do the cache at any point of a location like on client-side caching, server-side caching or client/server-side caching. We have different kinds of caching available in Asp.Net Core like we can do the caching In-Memory or we can use Response caching or we can use Distributed Caching.
Medium
medium.com › agoda-engineering › happy-asp-net-core-performance-optimization-4e21a383d299
ASP.NET Core Performance Optimization | by Ilya Nemtsev | Agoda Engineering & Design | Oct, 2020 | Medium | Agoda Engineering & Design
November 12, 2020 - This can improve performance because Clear() does not shrink the underlying array, but de-references the contained items allowing us to reuse the underlying array for our further needs. These are some of the more successful techniques I have used in my experience, most of which were implemented during Agoda’s migration effort to ASP.NET core.
Microsoft Learn
learn.microsoft.com › en-us › shows › on-dotnet › aspnet-core-series-performance-testing-techniques
ASP.NET Core Series: Performance Testing Techniques | Microsoft Learn
ASP.NET Core is a cross-platform, high-performance, open-source framework for building modern, cloud ready, connected applicationsIn this episode, Ryan Nowak chats with Cecil about some tools and techniques for doing performance testing against your ASP.NET Core applications.[01:52] - What should you really be testing?[05:26] - Setting memory constraints[07:45] - Collecting metrics with .NET counters[12:22] - Load testing tool options[15:20] - What do all these numbers mean?[18:38] - Getting setup with the .NET counters tool Useful LinksASP.NET Core Performance Best PracticesASP.NET Core documentationCreate a Web API with ASP.NET CoreBombardierdotnet counters
Facile Technolab
faciletechnolab.com › blog › 2021 › 5 › 17 › 5-performance-improvement-tips-for-aspnet-core-web-applications
5 performance improvement tips for asp.net core web ...
May 17, 2021 - ASP.NET Core is one of the best platforms for high-performance web application development. In this article, I am going to share 5 tips that can help your web application perform better. Use asynchronous database operations with entity framework core. Follow Entity framework core data access ...
Microsoft Learn
learn.microsoft.com › en-us › aspnet › core › blazor › performance
ASP.NET Core Blazor performance best practices | Microsoft Learn
The code examples in this node of articles adopt nullable reference types (NRTs) and .NET compiler null-state static analysis, which are supported in ASP.NET Core in .NET 6 or later. Ahead-of-time (AOT) compilation compiles a Blazor app's .NET code directly into native WebAssembly for direct execution by the browser. AOT-compiled apps result in larger apps that take longer to download, but AOT-compiled apps usually provide better runtime performance, especially for apps that execute CPU-intensive tasks.
Medium
medium.com › syncfusion › performance-tuning-in-asp-net-core-best-practices-for-2025-3ce6ddd8b562
Performance Tuning in ASP.NET Core: Best Practices for 2025 | by Rajeshwari Pandinagarajan | Syncfusion | Medium
November 28, 2025 - TL;DR: Supercharge ASP.NET Core 10 apps with five key optimizations: cut asset sizes by up to 92% using MapStaticAssets, accelerate caching with HybridCache, enforce rate limiting and timeouts for stability, slim Blazor bundles with AOT and WasmStripILAfterAOT, and track performance in real time with expanded metrics.
Telerik
telerik.com › blogs › tips-improving-api-performance-aspnet-core
Tips for Improving API Performance in ASP.NET Core
September 18, 2024 - In this post, we covered nine tips for optimizing resources and improving performance in an ASP.NET Core API. We covered everything from simple concepts such as code optimization to more complex implementations such as the use of distributed caching. So, when working with web APIs, consider adopting optimization practices for an efficient and scalable solution.
Medium
medium.com › agoda-engineering › asp-net-core-performance-optimization-how-to-maximize-performance-and-scalability-of-your-app-d676668aebea
ASP.NET Core: How to Maximize Performance and Scalability of Your App | by Agoda Engineering | Agoda Engineering & Design | Medium
August 7, 2023 - Assuming your API and database communications are already used sparingly, the next step is to explore further ways of reducing their frequency by leveraging caching. ASP.NET Core provides a convenient solution called IMemoryCache, which is user-friendly and straightforward to implement.
Positiwise
positiwise.com › home › .net core best practices: every asp.net developer must know
.NET Core Best Practices: Every ASP.NET Developer Must Know
November 8, 2023 - It will directly help you improve the performance and enhance the stability for all end-users. And it will provide an additional benefit of saving the cost of transmitting large objects repetitively. In a .NET Core application, you should consider configuring the following caches: ... Additionally, if you are building an ASP.NET core software, you must include the response caching middleware through the following code: