Fixing up a few small issues
The instruction matcher was missing a few details, which made it faster than it should have been. Right now I'm trying to keep the design of these in sync. Once I fixed that it exposed a legitimate bug that was blocking the github benchmark.
This commit is contained in:
parent
00e99dbbb2
commit
5b8db03a57
|
|
@ -61,10 +61,6 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
for (var i = 0; i < SampleCount; i++)
|
||||
{
|
||||
var sample = _samples[i];
|
||||
if (sample == 805)
|
||||
{
|
||||
GC.KeepAlive(5);
|
||||
}
|
||||
var httpContext = _requests[sample];
|
||||
await _dfa.MatchAsync(httpContext, feature);
|
||||
Validate(httpContext, _endpoints[sample], feature.Endpoint);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// 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.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
}
|
||||
|
||||
var i = 0;
|
||||
Candidate match = default(Candidate);
|
||||
var candidates = new List<Candidate>();
|
||||
while (i < state.Instructions.Length)
|
||||
{
|
||||
var instruction = state.Instructions[i];
|
||||
|
|
@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
{
|
||||
if (count == instruction.Depth)
|
||||
{
|
||||
match = state.Candidates[instruction.Payload];
|
||||
candidates.Add(state.Candidates[instruction.Payload]);
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
|
|
@ -92,10 +92,11 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
}
|
||||
}
|
||||
|
||||
if (match.Endpoint != null)
|
||||
var matches = new List<(Endpoint, RouteValueDictionary)>();
|
||||
for (i = 0; i < candidates.Count; i++)
|
||||
{
|
||||
var values = new RouteValueDictionary();
|
||||
var parameters = match.Parameters;
|
||||
var parameters = candidates[i].Parameters;
|
||||
if (parameters != null)
|
||||
{
|
||||
for (var j = 0; j < parameters.Length; j++)
|
||||
|
|
@ -113,13 +114,13 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
}
|
||||
}
|
||||
|
||||
feature.Endpoint = match.Endpoint;
|
||||
feature.Values = values;
|
||||
matches.Add((candidates[i].Endpoint, values));
|
||||
|
||||
notmatch:;
|
||||
}
|
||||
|
||||
|
||||
feature.Endpoint = matches.Count == 0 ? null : matches[0].Item1;
|
||||
feature.Values = matches.Count == 0 ? null : matches[0].Item2;
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.Routing.Matchers
|
|||
return comparison;
|
||||
}
|
||||
|
||||
comparison = y.Precedence.CompareTo(x.Precedence);
|
||||
comparison = x.Precedence.CompareTo(y.Precedence);
|
||||
if (comparison != 0)
|
||||
{
|
||||
return comparison;
|
||||
|
|
|
|||
Loading…
Reference in New Issue