aboutsummaryrefslogtreecommitdiff
path: root/benches
diff options
context:
space:
mode:
Diffstat (limited to 'benches')
-rw-r--r--benches/Jellyfin.Common.Benches/HexDecodeBenches.cs42
-rw-r--r--benches/Jellyfin.Common.Benches/HexEncodeBenches.cs29
-rw-r--r--benches/Jellyfin.Common.Benches/Jellyfin.Common.Benches.csproj16
-rw-r--r--benches/Jellyfin.Common.Benches/Program.cs14
4 files changed, 101 insertions, 0 deletions
diff --git a/benches/Jellyfin.Common.Benches/HexDecodeBenches.cs b/benches/Jellyfin.Common.Benches/HexDecodeBenches.cs
new file mode 100644
index 000000000..281275597
--- /dev/null
+++ b/benches/Jellyfin.Common.Benches/HexDecodeBenches.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Globalization;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Running;
+using MediaBrowser.Common;
+
+namespace Jellyfin.Common.Benches
+{
+ [MemoryDiagnoser]
+ public class HexDecodeBenches
+ {
+ private const int N = 1000000;
+ private readonly string data;
+
+ public HexDecodeBenches()
+ {
+ var tmp = new byte[N];
+ new Random(42).NextBytes(tmp);
+ data = Hex.Encode(tmp);
+ }
+
+ public static byte[] DecodeSubString(string str)
+ {
+ byte[] bytes = new byte[str.Length / 2];
+ for (int i = 0; i < str.Length; i += 2)
+ {
+ bytes[i / 2] = byte.Parse(
+ str.Substring(i, 2),
+ NumberStyles.HexNumber,
+ CultureInfo.InvariantCulture);
+ }
+
+ return bytes;
+ }
+
+ [Benchmark]
+ public byte[] Decode() => Hex.Decode(data);
+
+ [Benchmark]
+ public byte[] DecodeSubString() => DecodeSubString(data);
+ }
+}
diff --git a/benches/Jellyfin.Common.Benches/HexEncodeBenches.cs b/benches/Jellyfin.Common.Benches/HexEncodeBenches.cs
new file mode 100644
index 000000000..e7b446cc2
--- /dev/null
+++ b/benches/Jellyfin.Common.Benches/HexEncodeBenches.cs
@@ -0,0 +1,29 @@
+using System;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Running;
+using MediaBrowser.Common;
+
+namespace Jellyfin.Common.Benches
+{
+ [MemoryDiagnoser]
+ public class HexEncodeBenches
+ {
+ private const int N = 1000;
+ private readonly byte[] data;
+
+ public HexEncodeBenches()
+ {
+ data = new byte[N];
+ new Random(42).NextBytes(data);
+ }
+
+ [Benchmark]
+ public string HexEncode() => Hex.Encode(data);
+
+ [Benchmark]
+ public string BitConverterToString() => BitConverter.ToString(data);
+
+ [Benchmark]
+ public string BitConverterToStringWithReplace() => BitConverter.ToString(data).Replace("-", "");
+ }
+}
diff --git a/benches/Jellyfin.Common.Benches/Jellyfin.Common.Benches.csproj b/benches/Jellyfin.Common.Benches/Jellyfin.Common.Benches.csproj
new file mode 100644
index 000000000..4d5046bf9
--- /dev/null
+++ b/benches/Jellyfin.Common.Benches/Jellyfin.Common.Benches.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>netcoreapp3.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="BenchmarkDotNet" Version="0.11.5" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="../../MediaBrowser.Common/MediaBrowser.Common.csproj" />
+ </ItemGroup>
+
+</Project>
diff --git a/benches/Jellyfin.Common.Benches/Program.cs b/benches/Jellyfin.Common.Benches/Program.cs
new file mode 100644
index 000000000..b218b0dc1
--- /dev/null
+++ b/benches/Jellyfin.Common.Benches/Program.cs
@@ -0,0 +1,14 @@
+using System;
+using BenchmarkDotNet.Running;
+
+namespace Jellyfin.Common.Benches
+{
+ public static class Program
+ {
+ public static void Main(string[] args)
+ {
+ _ = BenchmarkRunner.Run<HexEncodeBenches>();
+ _ = BenchmarkRunner.Run<HexDecodeBenches>();
+ }
+ }
+}