Files
Umbraco-CMS/tests/Umbraco.Tests.Benchmarks/StringFileExtensionBenchmark.cs

81 lines
3.1 KiB
C#

using System;
using BenchmarkDotNet.Attributes;
using Umbraco.Tests.Benchmarks.Config;
namespace Umbraco.Tests.Benchmarks
{
[QuickRunWithMemoryDiagnoserConfig]
public class StringFileExtensionBenchmark
{
[Arguments("smallText.txt")]
[Arguments("aVeryLongTextThatContainsALotOfCharacters.txt")]
[Arguments("NotEvenAFile")]
[Benchmark(Baseline = true)]
public string StringStrip(string fileName)
{
// filenames cannot contain line breaks
if (fileName.Contains(Environment.NewLine) || fileName.Contains("\r") || fileName.Contains("\n"))
{
return fileName;
}
var lastIndex = fileName.LastIndexOf('.');
if (lastIndex > 0)
{
var ext = fileName.Substring(lastIndex);
// file extensions cannot contain whitespace
if (ext.Contains(" "))
{
return fileName;
}
return string.Format("{0}", fileName.Substring(0, fileName.IndexOf(ext, StringComparison.Ordinal)));
}
return fileName;
}
[Arguments("smallText.txt")]
[Arguments("aVeryLongTextThatContainsALotOfCharacters.txt")]
[Arguments("NotEvenAFile")]
[Benchmark]
public string SpanStrip(string fileName)
{
// filenames cannot contain line breaks
if (fileName.Contains(Environment.NewLine) || fileName.Contains("\r") || fileName.Contains("\n"))
{
return fileName;
}
var spanFileName = fileName.AsSpan();
var lastIndex = spanFileName.LastIndexOf('.');
if (lastIndex > 0)
{
var ext = spanFileName[lastIndex..];
// file extensions cannot contain whitespace
if (ext.Contains(' '))
{
return fileName;
}
return new string(spanFileName[..lastIndex]);
}
return fileName;
}
}
//| Method | fileName | Mean | Error | StdDev | Ratio | Gen 0 | Allocated |
//|------------ |--------------------- |----------:|----------:|---------:|------:|-------:|----------:|
//| StringStrip | NotEvenAFile | 45.08 ns | 1.277 ns | 0.070 ns | 1.00 | - | - |
//| SpanStrip | NotEvenAFile | 45.13 ns | 6.131 ns | 0.336 ns | 1.00 | - | - |
//| | | | | | | | |
//| StringStrip | aVery(...)s.txt[45] | 234.10 ns | 28.303 ns | 1.551 ns | 1.00 | 0.0751 | 240 B |
//| SpanStrip | aVery(...)s.txt[45] | 98.37 ns | 14.839 ns | 0.813 ns | 0.42 | 0.0331 | 104 B |
//| | | | | | | | |
//| StringStrip | smallText.txt | 187.79 ns | 35.672 ns | 1.955 ns | 1.00 | 0.0348 | 112 B |
//| SpanStrip | smallText.txt | 62.46 ns | 13.795 ns | 0.756 ns | 0.33 | 0.0124 | 40 B |
}