diff --git a/Mvc.sln b/Mvc.sln
index 7478c7b22e..2bcf1d1580 100644
--- a/Mvc.sln
+++ b/Mvc.sln
@@ -178,7 +178,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicViews", "benchmarkapps
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.Api.Analyzers.Test", "test\Mvc.Api.Analyzers.Test\Mvc.Api.Analyzers.Test.csproj", "{DD7B9F20-354C-4D9E-8C8A-8AE6E7595A87}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Api.Analyzers", "src\Microsoft.AspNetCore.Mvc.Api.Analyzers\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj", "{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Api.Analyzers", "src\Microsoft.AspNetCore.Mvc.Api.Analyzers\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj", "{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorRendering", "benchmarkapps\RazorRendering\RazorRendering.csproj", "{D7C6A696-F232-4288-BCCD-367407E4A934}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -952,6 +954,18 @@ Global
{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA}.Release|x86.ActiveCfg = Release|Any CPU
{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA}.Release|x86.Build.0 = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Debug|x86.Build.0 = Debug|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|x86.ActiveCfg = Release|Any CPU
+ {D7C6A696-F232-4288-BCCD-367407E4A934}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1025,6 +1039,7 @@ Global
{E89EB74D-C1CE-456F-B42D-CCF1575E0CFB} = {2859F266-673A-45A2-9E3C-7B39C6DDD38E}
{DD7B9F20-354C-4D9E-8C8A-8AE6E7595A87} = {3BA657BF-28B1-42DA-B5B0-1C4601FCF7B1}
{3B550487-10E4-4E6D-9CEF-B1B4CA1253DA} = {32285FA4-6B46-4D6B-A840-2B13E4C8B58E}
+ {D7C6A696-F232-4288-BCCD-367407E4A934} = {2859F266-673A-45A2-9E3C-7B39C6DDD38E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {63D344F6-F86D-40E6-85B9-0AABBE338C4A}
diff --git a/benchmarkapps/RazorRendering/Data/DataA.cs b/benchmarkapps/RazorRendering/Data/DataA.cs
new file mode 100644
index 0000000000..42cbf300ee
--- /dev/null
+++ b/benchmarkapps/RazorRendering/Data/DataA.cs
@@ -0,0 +1,26 @@
+using Microsoft.AspNetCore.Html;
+
+namespace Data
+{
+ public class DataA
+ {
+ public DataA(int id, HtmlString icon, HtmlString html, string name, int seconds, int max, float perHour)
+ {
+ Id = id;
+ Icon = icon;
+ Html = html;
+ Name = name;
+ Seconds = seconds;
+ Max = max;
+ PerHour = perHour;
+ }
+
+ public int Id { get; }
+ public HtmlString Icon { get; }
+ public HtmlString Html { get; }
+ public string Name { get; }
+ public int Seconds { get; }
+ public int Max { get; }
+ public float PerHour { get; }
+ }
+}
diff --git a/benchmarkapps/RazorRendering/Data/DataB.cs b/benchmarkapps/RazorRendering/Data/DataB.cs
new file mode 100644
index 0000000000..be2830e67f
--- /dev/null
+++ b/benchmarkapps/RazorRendering/Data/DataB.cs
@@ -0,0 +1,25 @@
+using System;
+using Microsoft.AspNetCore.Html;
+
+namespace Data
+{
+ public class DataB
+ {
+ public DataB(int id, HtmlString icon, string name, int value, DateTimeOffset startDate, DateTimeOffset completeDate)
+ {
+ Id = id;
+ Icon = icon;
+ Name = name;
+ Value = value;
+ StartDate = startDate;
+ CompleteDate = completeDate;
+ }
+
+ public int Id { get; }
+ public HtmlString Icon { get; }
+ public string Name { get; }
+ public int Value { get; }
+ public DateTimeOffset StartDate { get; }
+ public DateTimeOffset CompleteDate { get; }
+ }
+}
diff --git a/benchmarkapps/RazorRendering/Pages/Category/PageA.cshtml b/benchmarkapps/RazorRendering/Pages/Category/PageA.cshtml
new file mode 100644
index 0000000000..036af8cb1f
--- /dev/null
+++ b/benchmarkapps/RazorRendering/Pages/Category/PageA.cshtml
@@ -0,0 +1,138 @@
+@page
+@model Pages.PageA
+@using static System.Convert
+
+@section Subcategories {
+
| + | Something | +Something Something | + @if (Model.Value3 != 0) + { +Something | + } ++ |
|---|---|---|---|---|
| @data.Icon | +@data.Name | +@data.Html | + @if (Model.Value3 != 0) + { +
+ @(new TimeSpan(0, 0, (int)data.Seconds)) + (@data.PerHour.ToString("N2") p/h) + |
+ }
+ + + | +
| + | SomethingA | +SomethingB | +SomethingC | +SomethingD | +SomethingE | +SomethingF | ++ |
|---|---|---|---|---|---|---|---|
| @data.Icon | +@data.Name | +@data.Value | +@StartDate.ToString("dd MMM HH:mm:ss") | + @{ + float percentage = 100f; + + var totalTime = CompleteDate.Subtract(StartDate).TotalMilliseconds; + if (totalTime > 1000) + { + percentage = 100f * (float)DateTimeOffset.UtcNow.Subtract(StartDate).TotalMilliseconds / (float)totalTime; + } + + percentage = MathF.Min(100f, MathF.Max(0f, percentage)); + + var startDate = ToInt64(StartDate.Subtract(DateTime.UnixEpoch).Ticks / (double)10000); + var endDate = ToInt64(CompleteDate.Subtract(DateTime.UnixEpoch).Ticks / (double)10000); + } +
+
+
+
+ |
+ @CompleteDate.ToString("dd MMM HH:mm:ss") | ++ @(CompleteDate.Subtract(DateTime.UtcNow).ToString()) + | ++ + | +