From ae19892ab24ec3a7232cbaccde9b7ea61306dd64 Mon Sep 17 00:00:00 2001 From: benaadams Date: Mon, 14 Nov 2022 12:57:43 +0000 Subject: [PATCH 1/5] Update to .NET 7 --- .../aspnetcore/Benchmarks/Benchmarks.csproj | 9 ++- .../PlatformBenchmarks/AsciiString.cs | 57 -------------- .../BenchmarkApplication.Fortunes.cs | 10 +-- .../BenchmarkApplication.Json.cs | 10 +-- .../BenchmarkApplication.Plaintext.cs | 10 +-- .../BenchmarkApplication.cs | 78 +++++++++---------- .../PlatformBenchmarks/Data/CachedWorld.cs | 2 +- .../PlatformBenchmarks/DateHeader.cs | 4 +- .../PlatformBenchmarks.csproj | 3 +- .../aspnetcore/PlatformBenchmarks/Program.cs | 15 ++-- .../aspnetcore/aspcore-ado-my.dockerfile | 4 +- .../aspnetcore/aspcore-ado-pg-up.dockerfile | 4 +- .../aspnetcore/aspcore-ado-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mvc-ado-my.dockerfile | 4 +- .../aspcore-mvc-ado-pg-up.dockerfile | 4 +- .../aspnetcore/aspcore-mvc-ado-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mvc-dap-my.dockerfile | 4 +- .../aspcore-mvc-dap-pg-up.dockerfile | 4 +- .../aspnetcore/aspcore-mvc-dap-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mvc-ef-pg.dockerfile | 4 +- .../CSharp/aspnetcore/aspcore-mvc.dockerfile | 4 +- .../aspnetcore/aspcore-mw-ado-my.dockerfile | 4 +- .../aspcore-mw-ado-pg-up.dockerfile | 4 +- .../aspnetcore/aspcore-mw-ado-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mw-dap-my.dockerfile | 4 +- .../aspcore-mw-dap-pg-up.dockerfile | 4 +- .../aspnetcore/aspcore-mw-dap-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mw-ef-pg.dockerfile | 4 +- .../aspnetcore/aspcore-mw-json.dockerfile | 4 +- .../CSharp/aspnetcore/aspcore-mw.dockerfile | 4 +- .../CSharp/aspnetcore/aspcore.dockerfile | 4 +- 31 files changed, 113 insertions(+), 169 deletions(-) delete mode 100644 frameworks/CSharp/aspnetcore/PlatformBenchmarks/AsciiString.cs diff --git a/frameworks/CSharp/aspnetcore/Benchmarks/Benchmarks.csproj b/frameworks/CSharp/aspnetcore/Benchmarks/Benchmarks.csproj index 53993d1f71b..c138ffc0604 100644 --- a/frameworks/CSharp/aspnetcore/Benchmarks/Benchmarks.csproj +++ b/frameworks/CSharp/aspnetcore/Benchmarks/Benchmarks.csproj @@ -1,8 +1,9 @@  - net6.0 + net7.0 Exe enable + true @@ -13,10 +14,10 @@ - + - - + + diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/AsciiString.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/AsciiString.cs deleted file mode 100644 index 34c4a0f0adb..00000000000 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/AsciiString.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Text; - -namespace PlatformBenchmarks; - -public readonly struct AsciiString : IEquatable -{ - private readonly byte[] _data; - - public AsciiString(string s) => _data = Encoding.ASCII.GetBytes(s); - - private AsciiString(byte[] b) => _data = b; - - public int Length => _data.Length; - - public ReadOnlySpan AsSpan() => _data; - - public static implicit operator ReadOnlySpan(AsciiString str) => str._data; - public static implicit operator byte[](AsciiString str) => str._data; - - public static implicit operator AsciiString(string str) => new(str); - - public override string ToString() => Encoding.ASCII.GetString(_data); - public static explicit operator string(AsciiString str) => str.ToString(); - - public bool Equals(AsciiString other) => ReferenceEquals(_data, other._data) || SequenceEqual(_data, other._data); - private bool SequenceEqual(byte[] data1, byte[] data2) => new Span(data1).SequenceEqual(data2); - - public static bool operator ==(AsciiString a, AsciiString b) => a.Equals(b); - public static bool operator !=(AsciiString a, AsciiString b) => !a.Equals(b); - public override bool Equals(object other) => (other is AsciiString @string) && Equals(@string); - - public static AsciiString operator +(AsciiString a, AsciiString b) - { - var result = new byte[a.Length + b.Length]; - a._data.CopyTo(result, 0); - b._data.CopyTo(result, a.Length); - return new AsciiString(result); - } - - public override int GetHashCode() - { - // Copied from x64 version of string.GetLegacyNonRandomizedHashCode() - // https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/String.Comparison.cs - var data = _data; - int hash1 = 5381; - int hash2 = hash1; - foreach (int b in data) - { - hash1 = ((hash1 << 5) + hash1) ^ b; - } - return hash1 + (hash2 * 1566083941); - } - -} diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs index a60f6a3fc4a..ee9e94ff12f 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs @@ -12,11 +12,11 @@ namespace PlatformBenchmarks { public partial class BenchmarkApplication { - private readonly static AsciiString _fortunesPreamble = - _http11OK + - _headerServer + _crlf + - _headerContentTypeHtml + _crlf + - _headerContentLength; + private static ReadOnlySpan _fortunesPreamble => + "HTTP/1.1 200 OK\r\n"u8 + + "Server: K"u8 + "\r\n"u8 + + "Content-Type: text/html; charset=UTF-8"u8 + "\r\n"u8 + + "Content-Length: "u8; private async Task Fortunes(PipeWriter pipeWriter) { diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs index 02835c67f35..42df639c24a 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs @@ -10,11 +10,11 @@ public partial class BenchmarkApplication { private readonly static uint _jsonPayloadSize = (uint)JsonSerializer.SerializeToUtf8Bytes(new JsonMessage { message = "Hello, World!" }, SerializerContext.JsonMessage).Length; - private readonly static AsciiString _jsonPreamble = - _http11OK + - _headerServer + _crlf + - _headerContentTypeJson + _crlf + - _headerContentLength + _jsonPayloadSize.ToString(); + private static ReadOnlySpan _jsonPreamble => + "HTTP/1.1 200 OK\r\n"u8 + + "Server: K"u8 + "\r\n"u8 + + "Content-Type: application/json"u8 + "\r\n"u8 + + "Content-Length: 27"u8; private static void Json(ref BufferWriter writer, IBufferWriter bodyWriter) { diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Plaintext.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Plaintext.cs index 809ef6b3741..16a7c0f76eb 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Plaintext.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Plaintext.cs @@ -5,11 +5,11 @@ namespace PlatformBenchmarks; public partial class BenchmarkApplication { - private readonly static AsciiString _plaintextPreamble = - _http11OK + - _headerServer + _crlf + - _headerContentTypeText + _crlf + - _headerContentLength + _plainTextBody.Length.ToString(); + private static ReadOnlySpan _plaintextPreamble => + "HTTP/1.1 200 OK\r\n"u8 + + "Server: K\r\n"u8 + + "Content-Type: text/plain\r\n"u8 + + "Content-Length: 13"u8; private static void PlainText(ref BufferWriter writer) { diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs index b6a78f227d9..2ff1b8157e0 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs @@ -14,27 +14,27 @@ namespace PlatformBenchmarks; public partial class BenchmarkApplication { - private readonly static AsciiString _applicationName = "Kestrel Platform-Level Application"; - public static AsciiString ApplicationName => _applicationName; - - private readonly static AsciiString _crlf = "\r\n"; - private readonly static AsciiString _eoh = "\r\n\r\n"; // End Of Headers - private readonly static AsciiString _http11OK = "HTTP/1.1 200 OK\r\n"; - private readonly static AsciiString _http11NotFound = "HTTP/1.1 404 Not Found\r\n"; - private readonly static AsciiString _headerServer = "Server: K"; - private readonly static AsciiString _headerContentLength = "Content-Length: "; - private readonly static AsciiString _headerContentLengthZero = "Content-Length: 0"; - private readonly static AsciiString _headerContentTypeText = "Content-Type: text/plain"; - private readonly static AsciiString _headerContentTypeJson = "Content-Type: application/json"; - private readonly static AsciiString _headerContentTypeHtml = "Content-Type: text/html; charset=UTF-8"; - - private readonly static AsciiString _dbPreamble = - _http11OK + - _headerServer + _crlf + - _headerContentTypeJson + _crlf + - _headerContentLength; - - private readonly static AsciiString _plainTextBody = "Hello, World!"; + private static ReadOnlySpan _applicationName => "Kestrel Platform-Level Application"u8; + public static ReadOnlySpan ApplicationName => _applicationName; + + private static ReadOnlySpan _crlf => "\r\n"u8; + private static ReadOnlySpan _eoh => "\r\n\r\n"u8; // End Of Headers + private static ReadOnlySpan _http11OK => "HTTP/1.1 200 OK\r\n"u8; + private static ReadOnlySpan _http11NotFound => "HTTP/1.1 404 Not Found\r\n"u8; + private static ReadOnlySpan _headerServer => "Server: K"u8; + private static ReadOnlySpan _headerContentLength => "Content-Length: "u8; + private static ReadOnlySpan _headerContentLengthZero => "Content-Length: 0"u8; + private static ReadOnlySpan _headerContentTypeText => "Content-Type: text/plain"u8; + private static ReadOnlySpan _headerContentTypeJson => "Content-Type: application/json"u8; + private static ReadOnlySpan _headerContentTypeHtml => "Content-Type: text/html; charset=UTF-8"u8; + + private static ReadOnlySpan _dbPreamble => + "HTTP/1.1 200 OK\r\n"u8 + + "Server: K\r\n"u8 + + "Content-Type: application/json\r\n"u8 + + "Content-Length: "u8; + + private static ReadOnlySpan _plainTextBody => "Hello, World!"u8; private static readonly JsonContext SerializerContext = JsonContext.Default; @@ -46,12 +46,12 @@ private sealed partial class JsonContext : JsonSerializerContext { } - private readonly static AsciiString _fortunesTableStart = "Fortunes"; - private readonly static AsciiString _fortunesRowStart = ""; - private readonly static AsciiString _fortunesTableEnd = "
idmessage
"; - private readonly static AsciiString _fortunesColumn = ""; - private readonly static AsciiString _fortunesRowEnd = "
"; - private readonly static AsciiString _contentLengthGap = new string(' ', 4); + private static ReadOnlySpan _fortunesTableStart => "Fortunes"u8; + private static ReadOnlySpan _fortunesRowStart => ""u8; + private static ReadOnlySpan _fortunesTableEnd => "
idmessage
"u8; + private static ReadOnlySpan _fortunesColumn => ""u8; + private static ReadOnlySpan _fortunesRowEnd => "
"u8; + private static ReadOnlySpan _contentLengthGap => " "u8; #if DATABASE public static RawDb Db { get; set; } @@ -62,13 +62,13 @@ private sealed partial class JsonContext : JsonSerializerContext public static class Paths { - public readonly static AsciiString Json = "/json"; - public readonly static AsciiString Plaintext = "/plaintext"; - public readonly static AsciiString SingleQuery = "/db"; - public readonly static AsciiString Fortunes = "/fortunes"; - public readonly static AsciiString Updates = "/updates/"; - public readonly static AsciiString MultipleQueries = "/queries/"; - public readonly static AsciiString Caching = "/cached-worlds/"; + public static ReadOnlySpan Json => "/json"u8; + public static ReadOnlySpan Plaintext => "/plaintext"u8; + public static ReadOnlySpan SingleQuery => "/db"u8; + public static ReadOnlySpan Fortunes => "/fortunes"u8; + public static ReadOnlySpan Updates => "/updates/"u8; + public static ReadOnlySpan MultipleQueries => "/queries/"u8; + public static ReadOnlySpan Caching => "/cached-worlds/"u8; } private RequestType _requestType; @@ -169,11 +169,11 @@ private static Task Default(PipeWriter pipeWriter) return Task.CompletedTask; } #endif - private readonly static AsciiString _defaultPreamble = - _http11NotFound + - _headerServer + _crlf + - _headerContentTypeText + _crlf + - _headerContentLengthZero; + private static ReadOnlySpan _defaultPreamble => + "HTTP/1.1 200 OK\r\n"u8 + + "Server: K"u8 + "\r\n"u8 + + "Content-Type: text/plain"u8 + + "Content-Length: 0"u8; private static void Default(ref BufferWriter writer) { diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/CachedWorld.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/CachedWorld.cs index 61910b95587..fc59d5c17f0 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/CachedWorld.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/CachedWorld.cs @@ -9,5 +9,5 @@ public sealed class CachedWorld public int RandomNumber { get; set; } - public static implicit operator CachedWorld(World world) => new CachedWorld { Id = world.Id, RandomNumber = world.RandomNumber }; + public static implicit operator CachedWorld(World world) => new() { Id = world.Id, RandomNumber = world.RandomNumber }; } diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs index 9e768ad1f53..e582787bbd7 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs @@ -57,9 +57,7 @@ private static void SetDateValues(DateTimeOffset value) throw new Exception("date time format failed"); } Debug.Assert(written == dateTimeRLength); - var temp = s_headerBytesMaster; - s_headerBytesMaster = s_headerBytesScratch; - s_headerBytesScratch = temp; + (s_headerBytesScratch, s_headerBytesMaster) = (s_headerBytesMaster, s_headerBytesScratch); } } } diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj index 864d57f1676..951819f4c3a 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj @@ -1,9 +1,10 @@  - net6.0 + net7.0 Exe true enable + true diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs index d684abb40e8..c47f2d3b679 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Runtime.InteropServices; +using System.Text; namespace PlatformBenchmarks; @@ -13,15 +14,15 @@ public static async Task Main(string[] args) { Args = args; - Console.WriteLine(BenchmarkApplication.ApplicationName); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.ApplicationName)); #if !DATABASE - Console.WriteLine(BenchmarkApplication.Paths.Plaintext); - Console.WriteLine(BenchmarkApplication.Paths.Json); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.Plaintext)); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.Json)); #else - Console.WriteLine(BenchmarkApplication.Paths.Fortunes); - Console.WriteLine(BenchmarkApplication.Paths.SingleQuery); - Console.WriteLine(BenchmarkApplication.Paths.Updates); - Console.WriteLine(BenchmarkApplication.Paths.MultipleQueries); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.Fortunes)); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.SingleQuery)); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.Updates)); + Console.WriteLine(Encoding.UTF8.GetString(BenchmarkApplication.Paths.MultipleQueries)); #endif DateHeader.SyncDateTimer(); diff --git a/frameworks/CSharp/aspnetcore/aspcore-ado-my.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-ado-my.dockerfile index 3cdaa161421..d9e34c43f69 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-ado-my.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-ado-my.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY PlatformBenchmarks . RUN dotnet publish -c Release -o out /p:DatabaseProvider=MySqlConnector -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-ado-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-ado-pg-up.dockerfile index f1c909b8f3a..ef3297a9aa1 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-ado-pg-up.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-ado-pg-up.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY PlatformBenchmarks . RUN dotnet publish -c Release -o out /p:DatabaseProvider=Npgsql -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-ado-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-ado-pg.dockerfile index d197b0a28da..63ddf4c2eeb 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-ado-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-ado-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY PlatformBenchmarks . RUN dotnet publish -c Release -o out /p:DatabaseProvider=Npgsql -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-my.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-my.dockerfile index 6ef8811f9d1..2f9d6cef23d 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-my.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-my.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg-up.dockerfile index cb426c50006..49cd9671847 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg-up.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg-up.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg.dockerfile index f72002d3976..88aaae4e4b5 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-ado-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-my.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-my.dockerfile index 76e5651b0e7..460f7041203 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-my.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-my.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg-up.dockerfile index a650b43bb06..dc0e735d22f 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg-up.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg-up.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg.dockerfile index 6d16b107c51..4ab66ce7dc0 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-dap-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc-ef-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc-ef-pg.dockerfile index 3a16dee60b8..d972d3f4f0a 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc-ef-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc-ef-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mvc.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mvc.dockerfile index e2e5fb7f7f1..c02dc68281a 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mvc.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mvc.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-my.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-my.dockerfile index f3a96a54ae5..1648f0d6223 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-my.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-my.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg-up.dockerfile index c514f7acabf..a217244bfea 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg-up.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg-up.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg.dockerfile index 29461717b13..43380a14e32 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-ado-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-my.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-my.dockerfile index eb26af890d9..d97decf292a 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-my.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-my.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg-up.dockerfile index ce55a85ce0d..178256f5e0f 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg-up.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg-up.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg.dockerfile index 7b77884fbac..8b2cf7fb26a 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-dap-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-ef-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-ef-pg.dockerfile index bfa09e592e7..875a9045a44 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-ef-pg.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-ef-pg.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw-json.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw-json.dockerfile index 67096993685..113babbc939 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw-json.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw-json.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore-mw.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-mw.dockerfile index 0eb81c500af..4c2b45199ce 100644 --- a/frameworks/CSharp/aspnetcore/aspcore-mw.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore-mw.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY Benchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 # Full PGO diff --git a/frameworks/CSharp/aspnetcore/aspcore.dockerfile b/frameworks/CSharp/aspnetcore/aspcore.dockerfile index ef309958311..e7b1aaa550e 100644 --- a/frameworks/CSharp/aspnetcore/aspcore.dockerfile +++ b/frameworks/CSharp/aspnetcore/aspcore.dockerfile @@ -1,9 +1,9 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0.100 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build WORKDIR /app COPY PlatformBenchmarks . RUN dotnet publish -c Release -o out -FROM mcr.microsoft.com/dotnet/aspnet:6.0.0 AS runtime +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime ENV ASPNETCORE_URLS http://+:8080 ENV DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS 1 From e24c8b8de747546dec7e8bf7b83f2bfd731273b4 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Mon, 14 Nov 2022 18:47:21 +0000 Subject: [PATCH 2/5] Apply suggestions from code review Co-authored-by: Eric Erhardt --- .../PlatformBenchmarks/BenchmarkApplication.Fortunes.cs | 4 ++-- .../PlatformBenchmarks/BenchmarkApplication.Json.cs | 4 ++-- .../aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs index ee9e94ff12f..5d951303e0b 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Fortunes.cs @@ -14,8 +14,8 @@ public partial class BenchmarkApplication { private static ReadOnlySpan _fortunesPreamble => "HTTP/1.1 200 OK\r\n"u8 + - "Server: K"u8 + "\r\n"u8 + - "Content-Type: text/html; charset=UTF-8"u8 + "\r\n"u8 + + "Server: K\r\n"u8 + + "Content-Type: text/html; charset=UTF-8\r\n"u8 + "Content-Length: "u8; private async Task Fortunes(PipeWriter pipeWriter) diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs index 42df639c24a..ad213dfabe7 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.Json.cs @@ -12,8 +12,8 @@ public partial class BenchmarkApplication private static ReadOnlySpan _jsonPreamble => "HTTP/1.1 200 OK\r\n"u8 + - "Server: K"u8 + "\r\n"u8 + - "Content-Type: application/json"u8 + "\r\n"u8 + + "Server: K\r\n"u8 + + "Content-Type: application/json\r\n"u8 + "Content-Length: 27"u8; private static void Json(ref BufferWriter writer, IBufferWriter bodyWriter) diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs index 2ff1b8157e0..8295bbf6538 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs @@ -14,8 +14,7 @@ namespace PlatformBenchmarks; public partial class BenchmarkApplication { - private static ReadOnlySpan _applicationName => "Kestrel Platform-Level Application"u8; - public static ReadOnlySpan ApplicationName => _applicationName; + public static ReadOnlySpan ApplicationName => "Kestrel Platform-Level Application"u8; private static ReadOnlySpan _crlf => "\r\n"u8; private static ReadOnlySpan _eoh => "\r\n\r\n"u8; // End Of Headers From c13452dc84c65461870a3b1cd68fdd91a3cbd772 Mon Sep 17 00:00:00 2001 From: benaadams Date: Tue, 15 Nov 2022 08:05:54 +0000 Subject: [PATCH 3/5] Feedback --- frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs index e582787bbd7..89e951f2d9f 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/DateHeader.cs @@ -27,7 +27,7 @@ internal static class DateHeader static DateHeader() { - var utf8 = Encoding.ASCII.GetBytes("\r\nDate: ").AsSpan(); + var utf8 = "\r\nDate: "u8; utf8.CopyTo(s_headerBytesMaster); utf8.CopyTo(s_headerBytesScratch); From 3e57bc7407df21687c9e732a14f02edbb4dd788e Mon Sep 17 00:00:00 2001 From: benaadams Date: Tue, 15 Nov 2022 09:44:11 +0000 Subject: [PATCH 4/5] Seal classes --- .../aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs | 2 +- .../aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs | 2 +- .../PlatformBenchmarks/Data/Providers/RawDbMySqlConnector.cs | 2 +- .../aspnetcore/PlatformBenchmarks/Data/Providers/RawDbNpgsql.cs | 2 +- frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Random.cs | 2 +- .../CSharp/aspnetcore/PlatformBenchmarks/HttpApplication.cs | 2 +- frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs | 2 +- frameworks/CSharp/aspnetcore/PlatformBenchmarks/Startup.cs | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs index 8295bbf6538..627faed5dca 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/BenchmarkApplication.cs @@ -12,7 +12,7 @@ namespace PlatformBenchmarks; -public partial class BenchmarkApplication +public sealed partial class BenchmarkApplication { public static ReadOnlySpan ApplicationName => "Kestrel Platform-Level Application"u8; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs index 9eb7ff4edfa..39777801b5d 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs @@ -3,7 +3,7 @@ namespace PlatformBenchmarks; -internal class BatchUpdateString +internal sealed class BatchUpdateString { private const int MaxBatch = 500; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbMySqlConnector.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbMySqlConnector.cs index 0a0a27559de..45cbc27e64c 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbMySqlConnector.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbMySqlConnector.cs @@ -15,7 +15,7 @@ namespace PlatformBenchmarks { // Is semantically identical to RawDbNpgsql.cs. // If you are changing RawDbMySqlConnector.cs, also consider changing RawDbNpgsql.cs. - public class RawDb + public sealed class RawDb { private readonly ConcurrentRandom _random; private readonly string _connectionString; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbNpgsql.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbNpgsql.cs index 96391492ba8..024a8bb2b23 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbNpgsql.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Providers/RawDbNpgsql.cs @@ -15,7 +15,7 @@ namespace PlatformBenchmarks { // Is semantically identical to RawDbMySqlConnector.cs. // If you are changing RawDbNpgsql.cs, also consider changing RawDbMySqlConnector.cs. - public class RawDb + public sealed class RawDb { private readonly ConcurrentRandom _random; private readonly string _connectionString; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Random.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Random.cs index c5c634a2723..520500157b2 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Random.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/Random.cs @@ -5,7 +5,7 @@ namespace PlatformBenchmarks; -public class ConcurrentRandom +public sealed class ConcurrentRandom { private static int nextSeed = 0; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/HttpApplication.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/HttpApplication.cs index bed4e9de36a..d82368e15a3 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/HttpApplication.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/HttpApplication.cs @@ -14,7 +14,7 @@ public static class HttpApplicationConnectionBuilderExtensions } } -public class HttpApplication where TConnection : IHttpConnection, new() +public sealed class HttpApplication where TConnection : IHttpConnection, new() { public Task ExecuteAsync(ConnectionContext connection) { diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs index c47f2d3b679..5db336614c4 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs @@ -6,7 +6,7 @@ namespace PlatformBenchmarks; -public class Program +public sealed class Program { public static string[] Args; diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Startup.cs b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Startup.cs index 640f7a3d86d..069fe381a42 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Startup.cs +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/Startup.cs @@ -3,7 +3,7 @@ namespace PlatformBenchmarks; -public class Startup +public sealed class Startup { public void Configure(IApplicationBuilder app) { From b0a0c17aaa94ff2187018f59656f83e10cea4c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Mon, 21 Nov 2022 15:48:46 +0900 Subject: [PATCH 5/5] Add PublishAot configurations --- .../PlatformBenchmarks.csproj | 7 +++ .../aspcore-aot-ado-pg-up.dockerfile | 17 ++++++ .../aspnetcore/aspcore-aot-ado-pg.dockerfile | 17 ++++++ .../CSharp/aspnetcore/aspcore-aot.dockerfile | 18 ++++++ .../CSharp/aspnetcore/benchmark_config.json | 58 +++++++++++++++++++ frameworks/CSharp/aspnetcore/config.toml | 40 +++++++++++++ 6 files changed, 157 insertions(+) create mode 100644 frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg-up.dockerfile create mode 100644 frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg.dockerfile create mode 100644 frameworks/CSharp/aspnetcore/aspcore-aot.dockerfile diff --git a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj index 951819f4c3a..8a683cee525 100644 --- a/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj +++ b/frameworks/CSharp/aspnetcore/PlatformBenchmarks/PlatformBenchmarks.csproj @@ -4,7 +4,14 @@ Exe true enable + + true + + + true + Speed + true diff --git a/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg-up.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg-up.dockerfile new file mode 100644 index 00000000000..d3b548ae07c --- /dev/null +++ b/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg-up.dockerfile @@ -0,0 +1,17 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build +RUN apt-get update +RUN apt-get -yqq install clang zlib1g-dev +WORKDIR /app +COPY PlatformBenchmarks . +RUN dotnet publish -c Release -o out -p:PublishAot=true -p:DatabaseProvider=Npgsql + +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime +ENV ASPNETCORE_URLS http://+:8080 + +WORKDIR /app +COPY --from=build /app/out ./ +COPY PlatformBenchmarks/appsettings.postgresql.updates.json ./appsettings.json + +EXPOSE 8080 + +ENTRYPOINT ["./PlatformBenchmarks"] diff --git a/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg.dockerfile new file mode 100644 index 00000000000..ad71cca0d14 --- /dev/null +++ b/frameworks/CSharp/aspnetcore/aspcore-aot-ado-pg.dockerfile @@ -0,0 +1,17 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build +RUN apt-get update +RUN apt-get -yqq install clang zlib1g-dev +WORKDIR /app +COPY PlatformBenchmarks . +RUN dotnet publish -c Release -o out -p:PublishAot=true -p:DatabaseProvider=Npgsql + +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime +ENV ASPNETCORE_URLS http://+:8080 + +WORKDIR /app +COPY --from=build /app/out ./ +COPY PlatformBenchmarks/appsettings.postgresql.json ./appsettings.json + +EXPOSE 8080 + +ENTRYPOINT ["./PlatformBenchmarks"] diff --git a/frameworks/CSharp/aspnetcore/aspcore-aot.dockerfile b/frameworks/CSharp/aspnetcore/aspcore-aot.dockerfile new file mode 100644 index 00000000000..1a16e8f6c25 --- /dev/null +++ b/frameworks/CSharp/aspnetcore/aspcore-aot.dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build +RUN apt-get update +RUN apt-get -yqq install clang zlib1g-dev +WORKDIR /app +COPY PlatformBenchmarks . +RUN dotnet publish -c Release -o out -p:PublishAot=true + +FROM mcr.microsoft.com/dotnet/aspnet:7.0.0 AS runtime +ENV ASPNETCORE_URLS http://+:8080 +ENV DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS 1 + +WORKDIR /app +COPY --from=build /app/out ./ +COPY Benchmarks/appsettings.json ./appsettings.json + +EXPOSE 8080 + +ENTRYPOINT ["./PlatformBenchmarks"] diff --git a/frameworks/CSharp/aspnetcore/benchmark_config.json b/frameworks/CSharp/aspnetcore/benchmark_config.json index b742c109df2..0487405dc30 100644 --- a/frameworks/CSharp/aspnetcore/benchmark_config.json +++ b/frameworks/CSharp/aspnetcore/benchmark_config.json @@ -20,6 +20,25 @@ "notes": "", "versus": "aspcore" }, + "aot": { + "plaintext_url": "/plaintext", + "json_url": "/json", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "None", + "framework": "ASP.NET Core", + "language": "C#", + "orm": "Raw", + "platform": ".NET", + "flavor": "NativeAOT", + "webserver": "Kestrel", + "os": "Linux", + "database_os": "Linux", + "display_name": "ASP.NET Core [Platform, NativeAOT]", + "notes": "", + "versus": "aspcore-aot" + }, "ado-pg": { "fortune_url": "/fortunes", "db_url": "/db", @@ -41,6 +60,27 @@ "notes": "", "versus": "aspcore-ado-pg" }, + "aot-ado-pg": { + "fortune_url": "/fortunes", + "db_url": "/db", + "query_url": "/queries/", + "cached_query_url": "/cached-worlds/", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "ASP.NET Core", + "language": "C#", + "orm": "Raw", + "platform": ".NET", + "flavor": "NativeAOT", + "webserver": "Kestrel", + "os": "Linux", + "database_os": "Linux", + "display_name": "ASP.NET Core [Platform, NativeAOT, Pg]", + "notes": "", + "versus": "aspcore-aot-ado-pg" + }, "ado-pg-up": { "update_url": "/updates/", "port": 8080, @@ -59,6 +99,24 @@ "notes": "", "versus": "aspcore-ado-pg-up" }, + "aot-ado-pg-up": { + "update_url": "/updates/", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "ASP.NET Core", + "language": "C#", + "orm": "Raw", + "platform": ".NET", + "flavor": "NativeAOT", + "webserver": "Kestrel", + "os": "Linux", + "database_os": "Linux", + "display_name": "ASP.NET Core [Platform, NativeAOT, Pg]", + "notes": "", + "versus": "aspcore-aot-ado-pg-up" + }, "mw": { "plaintext_url": "/plaintext", "port": 8080, diff --git a/frameworks/CSharp/aspnetcore/config.toml b/frameworks/CSharp/aspnetcore/config.toml index 8535741d8a8..42cb9e5d20a 100644 --- a/frameworks/CSharp/aspnetcore/config.toml +++ b/frameworks/CSharp/aspnetcore/config.toml @@ -16,6 +16,21 @@ platform = ".NET" webserver = "Kestrel" versus = "aspcore-ado-pg" +[aot-ado-pg] +urls.db = "/db" +urls.query = "/queries/" +urls.fortune = "/fortunes" +urls.cached_query = "/cached-worlds/" +approach = "Realistic" +classification = "Platform" +database = "Postgres" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = ".NET" +webserver = "Kestrel" +versus = "aspcore-aot-ado-pg" + [ado-my] urls.db = "/db" urls.query = "/queries/" @@ -262,6 +277,19 @@ platform = ".NET" webserver = "Kestrel" versus = "aspcore" +[aot] +urls.plaintext = "/plaintext" +urls.json = "/json" +approach = "Realistic" +classification = "Platform" +database = "None" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = ".NET" +webserver = "Kestrel" +versus = "aspcore-aot" + [mvc-dap-pg-up] urls.update = "/mvc/updates/dapper?queries=" approach = "Realistic" @@ -309,3 +337,15 @@ orm = "Raw" platform = ".NET" webserver = "Kestrel" versus = "aspcore-ado-pg-up" + +[aot-ado-pg-up] +urls.update = "/updates/" +approach = "Realistic" +classification = "Platform" +database = "Postgres" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = ".NET" +webserver = "Kestrel" +versus = "aspcore-ado-pg-up"