Table of Contents

KEFCore: performance benchmarks

Note

This page is auto-generated by test/analyze-test-results/generate_perf_docs.py from the latest scheduled CI benchmark run. Do not edit it by hand — changes will be overwritten on the next run. See Performance tips for configuration guidance instead.

Generated: 2026-08-07T17:33:54.861250+00:00

Source run: https://github.com/masesgroup/KEFCore/actions/runs/31201973409

At a glance

Project Framework Cache Median iteration time (ms)
Benchmark net10.0 non-cached 120.906
Benchmark net10.0 cached 25.114
Benchmark net8.0 non-cached 133.992
Benchmark net8.0 cached 20.765
Benchmark net9.0 non-cached 126.087
Benchmark net9.0 cached 21.692
Complex net10.0 non-cached 251.687
Complex net10.0 cached 236.006
Complex net8.0 non-cached 245.823
Complex net8.0 cached 244.107
Complex net9.0 non-cached 232.232
Complex net9.0 cached 250.915

Full breakdown

The complete per-test results, produced by analyze_results.py:

Failures

None. All reported outcomes had success: true.

Summary by test

Framework is the .NET runtime the test ran under (e.g. net9.0), which corresponds directly to the EF Core major version under test. Cache bucket is derived from forwardCacheTimeout: cached means TTL > 0 (see KEFCoreCachedValueBufferStore.IsEnabled), non-cached covers zero/negative TTL (the default in test configs, e.g. -1 seconds).

Project Framework Test Cache N Mean (ms) Median (ms) Min (ms) Max (ms) Stdev (ms) Success rate
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [cold] non-cached 72 0.179 0.168 0.116 0.301 0.043 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [cold] cached 72 0.091 0.092 0.054 0.113 0.012 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [warm] non-cached 72 0.068 0.072 0.027 0.098 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [warm] cached 72 0.046 0.043 0.020 0.065 0.011 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] non-cached 72 0.104 0.108 0.049 0.150 0.027 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] cached 72 0.096 0.096 0.059 0.124 0.013 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] non-cached 72 0.072 0.080 0.021 0.112 0.025 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] cached 72 0.071 0.070 0.030 0.090 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] non-cached 72 0.085 0.091 0.036 0.119 0.023 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] cached 72 0.067 0.066 0.034 0.089 0.013 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [cold] non-cached 72 10.369 9.653 4.715 18.849 3.109 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [cold] cached 72 0.182 0.184 0.102 0.214 0.025 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [warm] non-cached 72 10.297 9.792 4.751 18.944 3.153 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [warm] cached 72 0.180 0.182 0.103 0.209 0.025 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 IterationTotal (sum of all queries above, not comparable to them individually) non-cached 72 124.149 120.906 76.067 200.100 28.307 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 IterationTotal (sum of all queries above, not comparable to them individually) cached 72 24.894 25.114 15.758 28.949 2.651 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts on BlogId non-cached 72 0.061 0.059 0.039 0.104 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts on BlogId cached 72 0.039 0.038 0.022 0.055 0.007 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts where Rating>=100 non-cached 72 0.059 0.060 0.034 0.086 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts where Rating>=100 cached 72 0.065 0.062 0.043 0.111 0.020 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [cold] non-cached 72 13.658 12.602 6.423 23.722 3.885 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [cold] cached 72 1.905 1.917 1.152 2.643 0.319 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [warm] non-cached 72 11.070 10.494 5.046 21.795 3.467 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [warm] cached 72 0.153 0.156 0.100 0.178 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) non-cached 72 10.870 10.215 5.002 20.928 3.255 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) cached 72 0.220 0.224 0.139 0.270 0.026 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Posts.All(true) non-cached 72 10.906 10.424 5.004 21.350 3.276 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Posts.All(true) cached 72 0.136 0.139 0.082 0.159 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [cold] non-cached 72 0.230 0.218 0.128 0.418 0.068 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [cold] cached 72 0.086 0.086 0.062 0.112 0.012 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [warm] non-cached 72 0.082 0.083 0.036 0.124 0.023 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [warm] cached 72 0.048 0.052 0.027 0.065 0.013 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] non-cached 72 0.125 0.134 0.050 0.168 0.032 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] cached 72 0.094 0.095 0.065 0.117 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] non-cached 72 0.087 0.092 0.025 0.131 0.028 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] cached 72 0.073 0.077 0.038 0.097 0.018 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] non-cached 72 0.097 0.100 0.037 0.140 0.026 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] cached 72 0.067 0.070 0.044 0.088 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [cold] non-cached 72 11.284 10.973 4.704 20.835 3.636 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [cold] cached 72 0.178 0.183 0.123 0.211 0.021 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [warm] non-cached 72 11.182 10.687 4.773 20.437 3.564 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [warm] cached 72 0.179 0.182 0.128 0.209 0.021 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 IterationTotal (sum of all queries above, not comparable to them individually) non-cached 72 136.569 133.992 73.802 222.913 34.681 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 IterationTotal (sum of all queries above, not comparable to them individually) cached 72 20.645 20.765 16.402 24.109 1.721 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts on BlogId non-cached 72 0.074 0.072 0.041 0.129 0.020 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts on BlogId cached 72 0.040 0.040 0.028 0.052 0.006 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts where Rating>=100 non-cached 72 0.074 0.073 0.039 0.112 0.020 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts where Rating>=100 cached 72 0.060 0.058 0.046 0.097 0.013 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [cold] non-cached 72 14.866 14.447 6.421 28.122 4.707 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [cold] cached 72 1.770 1.754 1.267 2.412 0.242 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [warm] non-cached 72 12.198 11.583 5.112 24.404 4.300 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [warm] cached 72 0.155 0.159 0.101 0.186 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) non-cached 72 12.084 11.667 5.197 23.222 4.026 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) cached 72 0.233 0.236 0.182 0.270 0.019 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Posts.All(true) non-cached 72 12.155 11.342 5.094 22.390 4.119 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Posts.All(true) cached 72 0.133 0.134 0.096 0.160 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [cold] non-cached 72 0.213 0.207 0.141 0.341 0.045 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [cold] cached 72 0.088 0.087 0.054 0.118 0.016 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [warm] non-cached 72 0.076 0.077 0.036 0.116 0.019 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [warm] cached 72 0.046 0.045 0.019 0.065 0.012 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] non-cached 72 0.118 0.116 0.058 0.162 0.023 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] cached 72 0.093 0.094 0.055 0.128 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] non-cached 72 0.081 0.084 0.030 0.117 0.023 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] cached 72 0.070 0.078 0.031 0.095 0.016 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] non-cached 72 0.092 0.094 0.045 0.132 0.022 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] cached 72 0.068 0.069 0.036 0.092 0.015 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [cold] non-cached 72 10.833 10.221 6.731 19.826 3.054 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [cold] cached 72 0.178 0.181 0.108 0.211 0.025 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [warm] non-cached 72 10.848 10.053 6.640 19.455 3.147 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [warm] cached 72 0.177 0.182 0.107 0.207 0.024 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 IterationTotal (sum of all queries above, not comparable to them individually) non-cached 72 129.419 126.087 86.581 209.999 29.739 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 IterationTotal (sum of all queries above, not comparable to them individually) cached 72 21.309 21.692 13.872 24.521 2.441 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts on BlogId non-cached 72 0.070 0.070 0.046 0.121 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts on BlogId cached 72 0.042 0.041 0.022 0.060 0.009 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts where Rating>=100 non-cached 72 0.072 0.076 0.044 0.095 0.014 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts where Rating>=100 cached 72 0.069 0.062 0.045 0.107 0.018 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [cold] non-cached 72 14.375 13.622 9.234 24.204 3.820 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [cold] cached 72 1.920 1.943 1.246 2.654 0.303 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [warm] non-cached 72 11.599 10.713 6.994 22.549 3.527 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [warm] cached 72 0.143 0.144 0.095 0.174 0.017 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) non-cached 72 11.650 10.871 7.015 21.779 3.464 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) cached 72 0.225 0.227 0.153 0.264 0.026 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Posts.All(true) non-cached 72 11.725 10.771 6.996 21.034 3.532 100%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Posts.All(true) cached 72 0.135 0.137 0.082 0.157 0.018 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 DataLoad non-cached 12 6401.523 6470.254 5782.213 6720.191 275.954 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 DataLoad cached 12 6432.000 6448.061 5811.594 6822.498 233.244 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 IterationTotal (sum of the two projection queries measured this run) non-cached 24 241.904 251.687 159.327 317.550 45.864 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 IterationTotal (sum of the two projection queries measured this run) cached 24 240.619 236.006 150.943 329.866 45.637 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 LocalStoreSynchronized non-cached 12 2410.746 2149.479 564.131 3238.333 774.353 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 LocalStoreSynchronized cached 12 2446.648 2140.281 1072.083 3140.346 666.186 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 NestedComplexTypeProjection_BlogId10_TaxCode non-cached 24 241.608 251.416 158.936 317.277 45.879 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 NestedComplexTypeProjection_BlogId10_TaxCode cached 24 240.287 235.683 150.563 329.565 45.646 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 SaveChanges non-cached 12 7102.411 7148.624 5817.612 8512.706 1011.361 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 SaveChanges cached 12 7193.694 7064.717 5791.619 8294.104 733.211 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 ScalarOnlyProjection_BlogId10_Url non-cached 24 0.274 0.271 0.210 0.348 0.044 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 ScalarOnlyProjection_BlogId10_Url cached 24 0.302 0.291 0.225 0.388 0.052 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 DataLoad non-cached 12 6168.861 6139.228 5936.776 6830.171 235.499 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 DataLoad cached 12 6059.959 6062.635 5558.720 6347.117 211.847 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 IterationTotal (sum of the two projection queries measured this run) non-cached 24 267.069 245.823 177.464 359.888 59.263 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 IterationTotal (sum of the two projection queries measured this run) cached 24 276.096 244.107 211.800 387.483 55.217 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 LocalStoreSynchronized non-cached 12 2271.202 2106.139 1073.523 3173.113 734.015 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 LocalStoreSynchronized cached 12 2453.435 2143.357 2078.818 3130.262 490.887 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 NestedComplexTypeProjection_BlogId10_TaxCode non-cached 24 266.699 245.553 177.086 359.606 59.284 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 NestedComplexTypeProjection_BlogId10_TaxCode cached 24 275.738 243.824 211.319 387.238 55.235 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 SaveChanges non-cached 12 6963.874 6874.714 5675.771 8783.737 771.333 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 SaveChanges cached 12 7220.814 7159.030 6345.806 8879.178 687.543 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 ScalarOnlyProjection_BlogId10_Url non-cached 24 0.334 0.335 0.250 0.448 0.051 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 ScalarOnlyProjection_BlogId10_Url cached 24 0.324 0.318 0.258 0.382 0.040 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 DataLoad non-cached 12 6085.177 6136.521 5663.994 6307.692 199.453 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 DataLoad cached 12 6168.807 6151.565 5895.888 6454.755 218.871 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 IterationTotal (sum of the two projection queries measured this run) non-cached 24 256.978 232.232 208.572 357.661 47.070 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 IterationTotal (sum of the two projection queries measured this run) cached 24 258.652 250.915 196.244 344.079 46.371 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 LocalStoreSynchronized non-cached 12 2274.756 2110.879 1073.018 3132.601 585.691 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 LocalStoreSynchronized cached 12 2378.020 2118.036 1118.227 3182.325 753.262 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 NestedComplexTypeProjection_BlogId10_TaxCode non-cached 24 256.633 231.930 208.056 357.388 47.104 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 NestedComplexTypeProjection_BlogId10_TaxCode cached 24 258.280 250.526 195.904 343.803 46.382 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 SaveChanges non-cached 12 6957.694 6893.901 5973.211 8617.785 797.779 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 SaveChanges cached 12 7319.143 7338.350 6313.520 8407.787 632.275 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 ScalarOnlyProjection_BlogId10_Url non-cached 24 0.308 0.305 0.244 0.381 0.040 100%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 ScalarOnlyProjection_BlogId10_Url cached 24 0.318 0.321 0.259 0.379 0.039 100%

Cached vs non-cached delta

Positive delta % means the cached run was slower than the non-cached run for that same test (higher median), computed separately per framework so a difference in EF Core version behavior isn't hidden by averaging across them. For a test whose non-cached path benefits from projection push-down, a consistently positive delta here is expected — projection is intentionally skipped when the per-entity cache is enabled (TTL > 0), so timings should tend back towards the full-entity-fetch cost in that case.

Project Framework Test Non-cached median (ms) Cached median (ms) Delta %
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [cold] 0.168 0.092 -44.9%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==1) [warm] 0.072 0.043 -40.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] 0.108 0.096 -10.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] 0.080 0.070 -12.1%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] 0.091 0.066 -27.4%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [cold] 9.653 0.184 -98.1%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Blogs.Where(range).Count() [warm] 9.792 0.182 -98.1%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 IterationTotal (sum of all queries above, not comparable to them individually) 120.906 25.114 -79.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts on BlogId 0.059 0.038 -35.5%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Join Blogs/Posts where Rating>=100 0.060 0.062 +3.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [cold] 12.602 1.917 -84.8%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==2) [warm] 10.494 0.156 -98.5%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) 10.215 0.224 -97.8%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net10.0 Posts.All(true) 10.424 0.139 -98.7%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [cold] 0.218 0.086 -60.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==1) [warm] 0.083 0.052 -37.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] 0.134 0.095 -29.4%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] 0.092 0.077 -16.5%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] 0.100 0.070 -29.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [cold] 10.973 0.183 -98.3%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Blogs.Where(range).Count() [warm] 10.687 0.182 -98.3%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 IterationTotal (sum of all queries above, not comparable to them individually) 133.992 20.765 -84.5%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts on BlogId 0.072 0.040 -45.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Join Blogs/Posts where Rating>=100 0.073 0.058 -20.3%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [cold] 14.447 1.754 -87.9%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==2) [warm] 11.583 0.159 -98.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) 11.667 0.236 -98.0%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net8.0 Posts.All(true) 11.342 0.134 -98.8%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [cold] 0.207 0.087 -58.0%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==1) [warm] 0.077 0.045 -41.0%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] 0.116 0.094 -18.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] 0.084 0.078 -7.0%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(BlogId==1).Select(Url) [scalar projection] 0.094 0.069 -26.7%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [cold] 10.221 0.181 -98.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Blogs.Where(range).Count() [warm] 10.053 0.182 -98.2%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 IterationTotal (sum of all queries above, not comparable to them individually) 126.087 21.692 -82.8%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts on BlogId 0.070 0.041 -41.6%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Join Blogs/Posts where Rating>=100 0.076 0.062 -17.5%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [cold] 13.622 1.943 -85.7%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==2) [warm] 10.713 0.144 -98.7%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Post.SingleOrDefault(BlogId==NumberOfElements-1) 10.871 0.227 -97.9%
MASES.EntityFrameworkCore.KNet.Test.Benchmark net9.0 Posts.All(true) 10.771 0.137 -98.7%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 DataLoad 6470.254 6448.061 -0.3%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 IterationTotal (sum of the two projection queries measured this run) 251.687 236.006 -6.2%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 LocalStoreSynchronized 2149.479 2140.281 -0.4%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 NestedComplexTypeProjection_BlogId10_TaxCode 251.416 235.683 -6.3%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 SaveChanges 7148.624 7064.717 -1.2%
MASES.EntityFrameworkCore.KNet.Test.Complex net10.0 ScalarOnlyProjection_BlogId10_Url 0.271 0.291 +7.2%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 DataLoad 6139.228 6062.635 -1.2%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 IterationTotal (sum of the two projection queries measured this run) 245.823 244.107 -0.7%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 LocalStoreSynchronized 2106.139 2143.357 +1.8%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 NestedComplexTypeProjection_BlogId10_TaxCode 245.553 243.824 -0.7%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 SaveChanges 6874.714 7159.030 +4.1%
MASES.EntityFrameworkCore.KNet.Test.Complex net8.0 ScalarOnlyProjection_BlogId10_Url 0.335 0.318 -4.8%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 DataLoad 6136.521 6151.565 +0.2%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 IterationTotal (sum of the two projection queries measured this run) 232.232 250.915 +8.0%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 LocalStoreSynchronized 2110.879 2118.036 +0.3%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 NestedComplexTypeProjection_BlogId10_TaxCode 231.930 250.526 +8.0%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 SaveChanges 6893.901 7338.350 +6.4%
MASES.EntityFrameworkCore.KNet.Test.Complex net9.0 ScalarOnlyProjection_BlogId10_Url 0.305 0.321 +5.0%

Cross-framework comparison

For the same project/test/cache-bucket, how the median elapsed time compares across the .NET/EF Core versions the CI matrix runs against. Only shown for combinations with data from more than one framework.

Project Test Cache net10.0 median (ms) net8.0 median (ms) net9.0 median (ms)
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==1) [cold] non-cached 0.168 0.218 0.207
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==1) [cold] cached 0.092 0.086 0.087
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==1) [warm] non-cached 0.072 0.083 0.077
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==1) [warm] cached 0.043 0.052 0.045
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] non-cached 0.108 0.134 0.116
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==NumberOfElements-1) [cold] cached 0.096 0.095 0.094
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] non-cached 0.080 0.092 0.084
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blog.SingleOrDefault(BlogId==NumberOfElements-1) [warm] cached 0.070 0.077 0.078
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(BlogId==1).Select(Url) [scalar projection] non-cached 0.091 0.100 0.094
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(BlogId==1).Select(Url) [scalar projection] cached 0.066 0.070 0.069
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(range).Count() [cold] non-cached 9.653 10.973 10.221
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(range).Count() [cold] cached 0.184 0.183 0.181
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(range).Count() [warm] non-cached 9.792 10.687 10.053
MASES.EntityFrameworkCore.KNet.Test.Benchmark Blogs.Where(range).Count() [warm] cached 0.182 0.182 0.182
MASES.EntityFrameworkCore.KNet.Test.Benchmark IterationTotal (sum of all queries above, not comparable to them individually) non-cached 120.906 133.992 126.087
MASES.EntityFrameworkCore.KNet.Test.Benchmark IterationTotal (sum of all queries above, not comparable to them individually) cached 25.114 20.765 21.692
MASES.EntityFrameworkCore.KNet.Test.Benchmark Join Blogs/Posts on BlogId non-cached 0.059 0.072 0.070
MASES.EntityFrameworkCore.KNet.Test.Benchmark Join Blogs/Posts on BlogId cached 0.038 0.040 0.041
MASES.EntityFrameworkCore.KNet.Test.Benchmark Join Blogs/Posts where Rating>=100 non-cached 0.060 0.073 0.076
MASES.EntityFrameworkCore.KNet.Test.Benchmark Join Blogs/Posts where Rating>=100 cached 0.062 0.058 0.062
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==2) [cold] non-cached 12.602 14.447 13.622
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==2) [cold] cached 1.917 1.754 1.943
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==2) [warm] non-cached 10.494 11.583 10.713
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==2) [warm] cached 0.156 0.159 0.144
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==NumberOfElements-1) non-cached 10.215 11.667 10.871
MASES.EntityFrameworkCore.KNet.Test.Benchmark Post.SingleOrDefault(BlogId==NumberOfElements-1) cached 0.224 0.236 0.227
MASES.EntityFrameworkCore.KNet.Test.Benchmark Posts.All(true) non-cached 10.424 11.342 10.771
MASES.EntityFrameworkCore.KNet.Test.Benchmark Posts.All(true) cached 0.139 0.134 0.137
MASES.EntityFrameworkCore.KNet.Test.Complex DataLoad non-cached 6470.254 6139.228 6136.521
MASES.EntityFrameworkCore.KNet.Test.Complex DataLoad cached 6448.061 6062.635 6151.565
MASES.EntityFrameworkCore.KNet.Test.Complex IterationTotal (sum of the two projection queries measured this run) non-cached 251.687 245.823 232.232
MASES.EntityFrameworkCore.KNet.Test.Complex IterationTotal (sum of the two projection queries measured this run) cached 236.006 244.107 250.915
MASES.EntityFrameworkCore.KNet.Test.Complex LocalStoreSynchronized non-cached 2149.479 2106.139 2110.879
MASES.EntityFrameworkCore.KNet.Test.Complex LocalStoreSynchronized cached 2140.281 2143.357 2118.036
MASES.EntityFrameworkCore.KNet.Test.Complex NestedComplexTypeProjection_BlogId10_TaxCode non-cached 251.416 245.553 231.930
MASES.EntityFrameworkCore.KNet.Test.Complex NestedComplexTypeProjection_BlogId10_TaxCode cached 235.683 243.824 250.526
MASES.EntityFrameworkCore.KNet.Test.Complex SaveChanges non-cached 7148.624 6874.714 6893.901
MASES.EntityFrameworkCore.KNet.Test.Complex SaveChanges cached 7064.717 7159.030 7338.350
MASES.EntityFrameworkCore.KNet.Test.Complex ScalarOnlyProjection_BlogId10_Url non-cached 0.271 0.335 0.305
MASES.EntityFrameworkCore.KNet.Test.Complex ScalarOnlyProjection_BlogId10_Url cached 0.291 0.318 0.321