diff --git a/tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs b/tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs index 349c94fa3..8ebe45430 100644 --- a/tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs +++ b/tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs @@ -7,25 +7,44 @@ namespace ImageProcessorCore.Benchmarks.General public class ArrayCopy { - private double[] source = new double[10000]; + [Params(100, 1000, 10000)] + public int Count { get; set; } - [Benchmark(Baseline = true, Description = "Copy using Array.Copy()")] - public double CopyArray() - { + byte[] source, destination; - double[] destination = new double[10000]; - Array.Copy(source, destination, 10000); + long sizeInBytes; - return destination[0]; + [Setup] + public void SetUp() + { + source = new byte[Count]; + destination = new byte[Count]; + } + + [Benchmark(Baseline = true, Description = "Copy using Array.Copy()")] + public void CopyArray() + { + Array.Copy(source, destination, Count); } [Benchmark(Description = "Copy using Unsafe")] - public unsafe double CopyUnsafe() + public unsafe void CopyUnsafe() { - double[] destination = new double[10000]; - Unsafe.Copy(Unsafe.AsPointer(ref destination), ref source); + fixed (byte* pinnedDestination = destination) + fixed (byte* pinnedSource = source) + { + Unsafe.CopyBlock(pinnedSource, pinnedDestination, (uint)Count); + } + } - return destination[0]; + [Benchmark(Description = "Copy using Buffer.MemoryCopy")] + public unsafe void CopyUsingBufferMemoryCopy() + { + fixed (byte* pinnedDestination = destination) + fixed (byte* pinnedSource = source) + { + Buffer.MemoryCopy(pinnedSource, pinnedDestination, Count, Count); + } } } }