From 72941a8f35db3dc8684a8499ec1d1719f3ae5d43 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Tue, 5 Jun 2018 21:52:27 -0700 Subject: [PATCH] Remove old cruft Our new benchmarks are already much better than this one. --- .../Matchers/SingleEntryMatcherBenchmark.cs | 16 +-- .../SmallEntryCountLiteralMatcherBenchark.cs | 12 +- .../RoutingBenchmark.cs | 113 ------------------ .../readme.md | 9 +- 4 files changed, 21 insertions(+), 129 deletions(-) delete mode 100644 benchmarks/Microsoft.AspNetCore.Routing.Performance/RoutingBenchmark.cs diff --git a/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SingleEntryMatcherBenchmark.cs b/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SingleEntryMatcherBenchmark.cs index 1c1fa03092..9c0b393cd8 100644 --- a/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SingleEntryMatcherBenchmark.cs +++ b/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SingleEntryMatcherBenchmark.cs @@ -18,19 +18,19 @@ namespace Microsoft.AspNetCore.Routing.Matchers [GlobalSetup] public void Setup() { + _endpoints = new MatcherEndpoint[1]; + _endpoints[0] = CreateEndpoint("/plaintext"); + + _requests = new HttpContext[1]; + _requests[0] = new DefaultHttpContext(); + _requests[0].RequestServices = CreateServices(); + _requests[0].Request.Path = "/plaintext"; + _minimal = SetupMatcher(MinimalMatcher.CreateBuilder()); _dfa = SetupMatcher(DfaMatcher.CreateBuilder()); _instruction = SetupMatcher(InstructionMatcher.CreateBuilder()); _route = SetupMatcher(RouteMatcher.CreateBuilder()); _tree = SetupMatcher(TreeRouterMatcher.CreateBuilder()); - - _endpoints = new MatcherEndpoint[0]; - _endpoints[0] = CreateEndpoint("/plaintext"); - - _requests = new HttpContext[0]; - _requests[0] = new DefaultHttpContext(); - _requests[0].RequestServices = CreateServices(); - _requests[0].Request.Path = "/plaintext"; } private Matcher SetupMatcher(MatcherBuilder builder) diff --git a/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SmallEntryCountLiteralMatcherBenchark.cs b/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SmallEntryCountLiteralMatcherBenchark.cs index 92ad9625a3..9e19aafae6 100644 --- a/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SmallEntryCountLiteralMatcherBenchark.cs +++ b/benchmarks/Microsoft.AspNetCore.Routing.Performance/Matchers/SmallEntryCountLiteralMatcherBenchark.cs @@ -18,12 +18,6 @@ namespace Microsoft.AspNetCore.Routing.Matchers [GlobalSetup] public void Setup() { - _minimal = SetupMatcher(MinimalMatcher.CreateBuilder()); - _dfa = SetupMatcher(DfaMatcher.CreateBuilder()); - _instruction = SetupMatcher(InstructionMatcher.CreateBuilder()); - _route = SetupMatcher(RouteMatcher.CreateBuilder()); - _tree = SetupMatcher(TreeRouterMatcher.CreateBuilder()); - _endpoints = new MatcherEndpoint[1]; _endpoints[0] = CreateEndpoint("/plaintext"); @@ -31,6 +25,12 @@ namespace Microsoft.AspNetCore.Routing.Matchers _requests[0] = new DefaultHttpContext(); _requests[0].RequestServices = CreateServices(); _requests[0].Request.Path = "/plaintext"; + + _minimal = SetupMatcher(MinimalMatcher.CreateBuilder()); + _dfa = SetupMatcher(DfaMatcher.CreateBuilder()); + _instruction = SetupMatcher(InstructionMatcher.CreateBuilder()); + _route = SetupMatcher(RouteMatcher.CreateBuilder()); + _tree = SetupMatcher(TreeRouterMatcher.CreateBuilder()); } // For this case we're specifically targeting the last entry to hit 'worst case' diff --git a/benchmarks/Microsoft.AspNetCore.Routing.Performance/RoutingBenchmark.cs b/benchmarks/Microsoft.AspNetCore.Routing.Performance/RoutingBenchmark.cs deleted file mode 100644 index 4387522f1b..0000000000 --- a/benchmarks/Microsoft.AspNetCore.Routing.Performance/RoutingBenchmark.cs +++ /dev/null @@ -1,113 +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; -using System.Linq; -using System.Threading.Tasks; -using BenchmarkDotNet.Attributes; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing.Internal; -using Microsoft.AspNetCore.Routing.Template; -using Microsoft.AspNetCore.Routing.Tree; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.ObjectPool; -using Microsoft.Extensions.Options; - -namespace Microsoft.AspNetCore.Routing.Performance -{ - public class RoutingBenchmark - { - private const int NumberOfRequestTypes = 3; - private const int Iterations = 100; - - private readonly IRouter _treeRouter; - private readonly RequestEntry[] _requests; - - public RoutingBenchmark() - { - var handler = new RouteHandler((next) => Task.FromResult(null)); - - var treeBuilder = new TreeRouteBuilder( - NullLoggerFactory.Instance, - new DefaultObjectPool(new UriBuilderContextPooledObjectPolicy()), - new DefaultInlineConstraintResolver(new OptionsManager(new OptionsFactory(Enumerable.Empty>(), Enumerable.Empty>())))); - - treeBuilder.MapInbound(handler, TemplateParser.Parse("api/Widgets"), "default", 0); - treeBuilder.MapInbound(handler, TemplateParser.Parse("api/Widgets/{id}"), "default", 0); - treeBuilder.MapInbound(handler, TemplateParser.Parse("api/Widgets/search/{term}"), "default", 0); - treeBuilder.MapInbound(handler, TemplateParser.Parse("admin/users/{id}"), "default", 0); - treeBuilder.MapInbound(handler, TemplateParser.Parse("admin/users/{id}/manage"), "default", 0); - - _treeRouter = treeBuilder.Build(); - - _requests = new RequestEntry[NumberOfRequestTypes]; - - _requests[0].HttpContext = new DefaultHttpContext(); - _requests[0].HttpContext.Request.Path = "/api/Widgets/5"; - _requests[0].IsMatch = true; - _requests[0].Values = new RouteValueDictionary(new { id = 5 }); - - _requests[1].HttpContext = new DefaultHttpContext(); - _requests[1].HttpContext.Request.Path = "/admin/users/17/mAnage"; - _requests[1].IsMatch = true; - _requests[1].Values = new RouteValueDictionary(new { id = 17 }); - - _requests[2].HttpContext = new DefaultHttpContext(); - _requests[2].HttpContext.Request.Path = "/api/Widgets/search/dldldldldld/ddld"; - _requests[2].IsMatch = false; - _requests[2].Values = new RouteValueDictionary(); - } - - [Benchmark(Description = "Attribute Routing", OperationsPerInvoke = Iterations * NumberOfRequestTypes)] - public async Task AttributeRouting() - { - for (var i = 0; i < Iterations; i++) - { - for (var j = 0; j < _requests.Length; j++) - { - var context = new RouteContext(_requests[j].HttpContext); - - await _treeRouter.RouteAsync(context); - - Verify(context, j); - } - } - } - - private void Verify(RouteContext context, int i) - { - if (_requests[i].IsMatch) - { - if (context.Handler == null) - { - throw new InvalidOperationException($"Failed {i}"); - } - - var values = _requests[i].Values; - if (values.Count != context.RouteData.Values.Count) - { - throw new InvalidOperationException($"Failed {i}"); - } - } - else - { - if (context.Handler != null) - { - throw new InvalidOperationException($"Failed {i}"); - } - - if (context.RouteData.Values.Count != 0) - { - throw new InvalidOperationException($"Failed {i}"); - } - } - } - - private struct RequestEntry - { - public HttpContext HttpContext; - public bool IsMatch; - public RouteValueDictionary Values; - } - } -} \ No newline at end of file diff --git a/benchmarks/Microsoft.AspNetCore.Routing.Performance/readme.md b/benchmarks/Microsoft.AspNetCore.Routing.Performance/readme.md index 38ce0ff71a..cbe60261b3 100644 --- a/benchmarks/Microsoft.AspNetCore.Routing.Performance/readme.md +++ b/benchmarks/Microsoft.AspNetCore.Routing.Performance/readme.md @@ -2,10 +2,15 @@ Compile the solution in Release mode (so binaries are available in release) To run a specific benchmark add it as parameter. ``` -dotnet run -c Release +dotnet run -c Release --framework +``` + +To run all benchmarks use '*' as the name. +``` +dotnet run -c Release --framework * ``` If you run without any parameters, you'll be offered the list of all benchmarks and get to choose. ``` -dotnet run -c Release +dotnet run -c Release --framework ``` \ No newline at end of file