These changes are aimed at significantly improving the performance of MVC/Razor when a large amount of content is in play or a large number of TagHelpers are used. A few issues addressed: - Buffer sync writes after a flush has occurred so that we can write them asyncronously. The issue is that an IHtmlContent can only do sync writes. This is very bad for Kestrel in general. Doing these writes async is better for our overall perf, and the buffer that we use for it is from the pool. - 'Flatten' ViewBuffers when possible. A page with lots of TagHelpers can end up renting a ViewBuffer and only write 2-3 things into it. When a ViewBuffer sees another ViewBuffer we can either steal its pages, or copy data out and 'return' its pages. This lets us use 3-4 buffers for a large Razor page instead of hundreds. |
||
|---|---|---|
| .. | ||
| Compilation | ||
| Internal | ||
| Properties | ||
| TagHelpers | ||
| LanguageViewLocationExpanderTest.cs | ||
| Microsoft.AspNetCore.Mvc.Razor.Test.xproj | ||
| MvcRazorCodeParserTest.cs | ||
| RazorPageActivatorTest.cs | ||
| RazorPageCreateModelExpressionTest.cs | ||
| RazorPageCreateTagHelperTest.cs | ||
| RazorPageTest.cs | ||
| RazorTextWriterTest.cs | ||
| RazorViewEngineOptionsTest.cs | ||
| RazorViewEngineTest.cs | ||
| RazorViewTest.cs | ||
| SpanFactory.cs | ||
| project.json | ||