File: QueryCollectionBenchmarks.cs
Web Access
Project: src\src\Http\Http\perf\Microbenchmarks\Microsoft.AspNetCore.Http.Microbenchmarks.csproj (Microsoft.AspNetCore.Http.Microbenchmarks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.WebUtilities;
using static Microsoft.AspNetCore.Http.Features.QueryFeature;
 
namespace Microsoft.AspNetCore.Http;
 
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
[CategoriesColumn]
public class QueryCollectionBenchmarks
{
    private const string _queryString = "?key1=value1&key2=value2&key3=value3&key4=&key5=";
    private const string _singleValue = "?key1=value1";
    private const string _singleValueWithPlus = "?key1=value1+value2+value3";
    private const string _encoded = "?key1=value%231";
 
    [Benchmark(Description = "ParseNew")]
    [BenchmarkCategory("QueryString")]
    public void ParseNew()
    {
        _ = QueryFeature.ParseNullableQueryInternal(_queryString);
    }
 
    [Benchmark(Description = "ParseNew")]
    [BenchmarkCategory("Single")]
    public void ParseNewSingle()
    {
        _ = QueryFeature.ParseNullableQueryInternal(_singleValue);
    }
 
    [Benchmark(Description = "ParseNew")]
    [BenchmarkCategory("SingleWithPlus")]
    public void ParseNewSingleWithPlus()
    {
        _ = QueryFeature.ParseNullableQueryInternal(_singleValueWithPlus);
    }
 
    [Benchmark(Description = "ParseNew")]
    [BenchmarkCategory("Encoded")]
    public void ParseNewEncoded()
    {
        _ = QueryFeature.ParseNullableQueryInternal(_encoded);
    }
 
    [Benchmark(Description = "QueryHelpersParse")]
    [BenchmarkCategory("QueryString")]
    public void QueryHelpersParse()
    {
        _ = QueryHelpers.ParseNullableQuery(_queryString);
    }
 
    [Benchmark(Description = "QueryHelpersParse")]
    [BenchmarkCategory("Single")]
    public void QueryHelpersParseSingle()
    {
        _ = QueryHelpers.ParseNullableQuery(_singleValue);
    }
 
    [Benchmark(Description = "QueryHelpersParse")]
    [BenchmarkCategory("SingleWithPlus")]
    public void QueryHelpersParseSingleWithPlus()
    {
        _ = QueryHelpers.ParseNullableQuery(_singleValueWithPlus);
    }
 
    [Benchmark(Description = "QueryHelpersParse")]
    [BenchmarkCategory("Encoded")]
    public void QueryHelpersParseEncoded()
    {
        _ = QueryHelpers.ParseNullableQuery(_encoded);
    }
 
    [Benchmark]
    [BenchmarkCategory("Constructor")]
    public void Constructor()
    {
        var dict = new KvpAccumulator();
        if (dict.HasValues)
        {
            return;
        }
    }
}