81 lines
3.1 KiB
C#
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 |
|
||
|
|
}
|