diff --git a/src/BenchmarksApps/TechEmpower/BlazorSSR/Components/FortunesParameters.razor b/src/BenchmarksApps/TechEmpower/BlazorSSR/Components/FortunesParameters.razor
new file mode 100644
index 000000000..ab2aa39f1
--- /dev/null
+++ b/src/BenchmarksApps/TechEmpower/BlazorSSR/Components/FortunesParameters.razor
@@ -0,0 +1,19 @@
+
+
+
+ Fortunes
+
+
+
+ id | message |
+ @foreach (var item in Rows)
+ {
+ @item.Id | @item.Message |
+ }
+
+
+
+@code {
+ [Parameter]
+ public required List Rows { get; set; }
+}
diff --git a/src/BenchmarksApps/TechEmpower/BlazorSSR/Database/Db.cs b/src/BenchmarksApps/TechEmpower/BlazorSSR/Database/Db.cs
index 2d6f48887..0a49d6098 100644
--- a/src/BenchmarksApps/TechEmpower/BlazorSSR/Database/Db.cs
+++ b/src/BenchmarksApps/TechEmpower/BlazorSSR/Database/Db.cs
@@ -22,7 +22,7 @@ public async Task> LoadFortunesRowsDapper()
await using var connection = _dataSource.CreateConnection();
var result = (await connection.QueryAsync($"SELECT id, message FROM fortune")).AsList();
- result.Add(new Fortune { Id = 0, Message = "Additional fortune added at request time." });
+ result.Add(new() { Id = 0, Message = "Additional fortune added at request time." });
result.Sort(FortuneSortComparison);
return result;
@@ -37,11 +37,36 @@ public async Task> LoadFortunesRowsEf(AppDbContext dbContext)
result.Add(fortune);
}
- result.Add(new Fortune { Id = 0, Message = "Additional fortune added at request time." });
+ result.Add(new() { Id = 0, Message = "Additional fortune added at request time." });
result.Sort(FortuneSortComparison);
return result;
}
+ public Task> LoadFortunesRowsNoDb()
+ {
+ // Benchmark requirements explicitly prohibit pre-initializing the list size
+ var result = new List
+ {
+ new() { Id = 1, Message = "fortune: No such file or directory" },
+ new() { Id = 2, Message = "A computer scientist is someone who fixes things that aren't broken." },
+ new() { Id = 3, Message = "After enough decimal places, nobody gives a damn." },
+ new() { Id = 4, Message = "A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1" },
+ new() { Id = 5, Message = "A computer program does what you tell it to do, not what you want it to do." },
+ new() { Id = 6, Message = "Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen" },
+ new() { Id = 7, Message = "Any program that runs right is obsolete." },
+ new() { Id = 8, Message = "A list is only as strong as its weakest link. — Donald Knuth" },
+ new() { Id = 9, Message = "Feature: A bug with seniority." },
+ new() { Id = 10, Message = "Computers make very fast, very accurate mistakes." },
+ new() { Id = 11, Message = "" },
+ new() { Id = 12, Message = "フレームワークのベンチマーク" },
+ new() { Id = 0, Message = "Additional fortune added at request time." }
+ };
+
+ result.Sort(FortuneSortComparison);
+
+ return Task.FromResult(result);
+ }
+
ValueTask IAsyncDisposable.DisposeAsync() => _dataSource.DisposeAsync();
}
diff --git a/src/BenchmarksApps/TechEmpower/BlazorSSR/FortunesRazorParameters.cs b/src/BenchmarksApps/TechEmpower/BlazorSSR/FortunesRazorParameters.cs
new file mode 100644
index 000000000..21adb0dd1
--- /dev/null
+++ b/src/BenchmarksApps/TechEmpower/BlazorSSR/FortunesRazorParameters.cs
@@ -0,0 +1,63 @@
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using BlazorSSR.Components;
+using BlazorSSR.Models;
+
+namespace BlazorSSR;
+
+internal readonly struct FortunesRazorParameters(List model) : IReadOnlyDictionary
+{
+ private const string ModelKeyName = nameof(FortunesParameters.Rows);
+
+ private readonly KeyValuePair _modelKvp = new(ModelKeyName, model);
+
+ public object? this[string key] => KeyIsModel(key) ? model : null;
+
+ public IEnumerable Keys { get; } = [ModelKeyName];
+
+ public IEnumerable