From edc96a615f629e3979ccf4c3afa2f53d2aa2b803 Mon Sep 17 00:00:00 2001 From: Christian Luksch Date: Mon, 13 May 2024 23:53:06 +0200 Subject: [PATCH] added StreamCodeReader benchmark --- .config/dotnet-tools.json | 2 +- src/Aardvark.Base.IO/StreamCodeReader.cs | 5 +- src/Aardvark.Base.IO/StreamCodeWriter.cs | 8 +- .../Aardvark.Base.Benchmarks.csproj | 1 + src/Tests/Aardvark.Base.Benchmarks/Program.cs | 5 +- .../StreamWriterReader.cs | 74 +++++++++++++++++++ 6 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 src/Tests/Aardvark.Base.Benchmarks/StreamWriterReader.cs diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 4c449007..673835b8 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "paket": { - "version": "7.2.1", + "version": "8.0.3", "commands": [ "paket" ] diff --git a/src/Aardvark.Base.IO/StreamCodeReader.cs b/src/Aardvark.Base.IO/StreamCodeReader.cs index ce07af4a..f65ecf41 100644 --- a/src/Aardvark.Base.IO/StreamCodeReader.cs +++ b/src/Aardvark.Base.IO/StreamCodeReader.cs @@ -10,8 +10,6 @@ namespace Aardvark.Base.Coder { public partial class StreamCodeReader : BinaryReader { - private const int c_bufferSize = 262144; - // private byte[] m_buffer = new byte[c_bufferSize]; private byte[] m_guidBuffer = new byte[16]; // own buffer since creator requires 16-byte length #region Constructors @@ -101,6 +99,7 @@ public long ReadArray(byte[] array, long index, long count) return (long)Read(array, (int)index, (int)count); } +#if !NET6_0_OR_GREATER [StructLayout(LayoutKind.Explicit)] struct ByteArrayUnion { @@ -119,6 +118,7 @@ private static IntPtr GetTypeIdUncached() where T : struct gcHandle.Free(); return typeId; } +#endif public long ReadArray(T[] array, long index, long count) where T : struct @@ -307,7 +307,6 @@ public int ReadList(List buffer, int index, int count) public override void Close() { base.Close(); - // m_buffer = null; m_guidBuffer = null; } diff --git a/src/Aardvark.Base.IO/StreamCodeWriter.cs b/src/Aardvark.Base.IO/StreamCodeWriter.cs index 6a765d9a..0d06ff34 100644 --- a/src/Aardvark.Base.IO/StreamCodeWriter.cs +++ b/src/Aardvark.Base.IO/StreamCodeWriter.cs @@ -10,8 +10,10 @@ namespace Aardvark.Base.Coder { public partial class StreamCodeWriter : BinaryWriter { +#if !NET6_0_OR_GREATER private const int c_bufferSize = 262144; private byte[] m_buffer = new byte[c_bufferSize]; +#endif #region Constructors @@ -106,6 +108,7 @@ public void Write(CameraIntrinsics c) #region Write Arrays and Lists +#if !NET6_0_OR_GREATER [StructLayout(LayoutKind.Explicit)] struct ByteArrayUnion { @@ -114,6 +117,7 @@ struct ByteArrayUnion [FieldOffset(0)] public Array structs; } +#endif public void WriteArray(byte[] array, long index, long count) { @@ -259,9 +263,11 @@ public void WriteList(List buffer, int index, int count) public override void Close() { base.Close(); +#if! NET6_0_OR_GREATER m_buffer = null; +#endif } - #endregion +#endregion } } diff --git a/src/Tests/Aardvark.Base.Benchmarks/Aardvark.Base.Benchmarks.csproj b/src/Tests/Aardvark.Base.Benchmarks/Aardvark.Base.Benchmarks.csproj index 9038b6aa..ac034b9c 100644 --- a/src/Tests/Aardvark.Base.Benchmarks/Aardvark.Base.Benchmarks.csproj +++ b/src/Tests/Aardvark.Base.Benchmarks/Aardvark.Base.Benchmarks.csproj @@ -27,6 +27,7 @@ + diff --git a/src/Tests/Aardvark.Base.Benchmarks/Program.cs b/src/Tests/Aardvark.Base.Benchmarks/Program.cs index a1fb1e23..70ed7aa1 100644 --- a/src/Tests/Aardvark.Base.Benchmarks/Program.cs +++ b/src/Tests/Aardvark.Base.Benchmarks/Program.cs @@ -1,6 +1,5 @@ using BenchmarkDotNet.Running; using BenchmarkDotNet.Configs; -using BenchmarkDotNet.Jobs; namespace Aardvark.Base.Benchmarks { @@ -9,7 +8,9 @@ public class Program public static void Main(string[] args) { var cfg = ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator); - BenchmarkSwitcher.FromAssembly(typeof(IntegerPowerFloat).Assembly).Run(args, cfg); + //BenchmarkSwitcher.FromAssembly(typeof(IntegerPowerFloat).Assembly).Run(args, cfg); + + BenchmarkRunner.Run(cfg); //BenchmarkRunner.Run(); //BenchmarkRunner.Run i); + _writer = new StreamCodeWriter(new MemoryStream(_data.Length * 4)); + + var tmpWriter = new StreamCodeWriter(new MemoryStream(_data.Length * 4)); + tmpWriter.WriteArray(_data, 0, _data.Length); + _reader = new StreamCodeReader(tmpWriter.BaseStream); + } + + [Benchmark] + public void WriteArray() + { + _writer.BaseStream.Position = 0; + _writer.WriteArray(_data, 0, _data.Length); + } + + [Benchmark] + public void ReadArray() + { + _reader.BaseStream.Position = 0; + _reader.ReadArray(_data, 0, _data.Length); + } + } +}