Browse Source

Merge pull request #468 from adamsitnik/bufferMemoryCopy

added Buffer.MemoryCopy to ArrayCopy benchmarks [skip ci]

Former-commit-id: 76c030a3340f0f8ccf19121a73f229477f14fef1
Former-commit-id: 179e244c10598a2a1a9e44e1bd8d6ca7ba192018
Former-commit-id: 7406fe104725b86c4a73f26b42988fe04d2c77a8
pull/1/head
James Jackson-South 10 years ago
committed by GitHub
parent
commit
40a2400f83
  1. 41
      tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs

41
tests/ImageProcessorCore.Benchmarks/General/ArrayCopy.cs

@ -7,25 +7,44 @@ namespace ImageProcessorCore.Benchmarks.General
public class ArrayCopy 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()")] byte[] source, destination;
public double CopyArray()
{
double[] destination = new double[10000]; long sizeInBytes;
Array.Copy(source, destination, 10000);
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<T>")] [Benchmark(Description = "Copy using Unsafe<T>")]
public unsafe double CopyUnsafe() public unsafe void CopyUnsafe()
{ {
double[] destination = new double[10000]; fixed (byte* pinnedDestination = destination)
Unsafe.Copy(Unsafe.AsPointer(ref destination), ref source); fixed (byte* pinnedSource = source)
{
Unsafe.CopyBlock(pinnedSource, pinnedDestination, (uint)Count);
}
}
return destination[0]; [Benchmark(Description = "Copy using Buffer.MemoryCopy<T>")]
public unsafe void CopyUsingBufferMemoryCopy()
{
fixed (byte* pinnedDestination = destination)
fixed (byte* pinnedSource = source)
{
Buffer.MemoryCopy(pinnedSource, pinnedDestination, Count, Count);
}
} }
} }
} }

Loading…
Cancel
Save