mirror of https://github.com/SixLabors/ImageSharp
6 changed files with 153 additions and 106 deletions
@ -0,0 +1,72 @@ |
|||||
|
// Copyright (c) Six Labors.
|
||||
|
// Licensed under the Apache License, Version 2.0.
|
||||
|
|
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using BenchmarkDotNet.Attributes; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
||||
|
{ |
||||
|
[MemoryDiagnoser] |
||||
|
[ShortRunJob] |
||||
|
public class LoadResizeSaveStressBenchmarks |
||||
|
{ |
||||
|
private LoadResizeSaveStressRunner runner; |
||||
|
|
||||
|
[GlobalSetup] |
||||
|
public void Setup() |
||||
|
{ |
||||
|
this.runner = new LoadResizeSaveStressRunner() { ImageCount = Environment.ProcessorCount }; |
||||
|
Console.WriteLine("ImageCount:" + this.runner.ImageCount); |
||||
|
this.runner.Init(); |
||||
|
} |
||||
|
|
||||
|
private void ForEachImage(Action<string> action, int maxDegreeOfParallelism) |
||||
|
{ |
||||
|
this.runner.MaxDegreeOfParallelism = maxDegreeOfParallelism; |
||||
|
this.runner.ForEachImageParallel(action); |
||||
|
} |
||||
|
|
||||
|
public int[] ParallelismValues { get; } = |
||||
|
{ |
||||
|
Environment.ProcessorCount, |
||||
|
Environment.ProcessorCount / 2, |
||||
|
Environment.ProcessorCount / 4, |
||||
|
1 |
||||
|
}; |
||||
|
|
||||
|
[Benchmark(Baseline = true)] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void SystemDrawing(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SystemDrawingResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void ImageSharp(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.ImageSharpResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void Magick(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagickResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void FreeImage(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.FreeImageResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void MagicScaler(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagicScalerResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void SkiaCanvas(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SkiaCanvasResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void SkiaBitmap(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SkiaBitmapResize, maxDegreeOfParallelism); |
||||
|
|
||||
|
[Benchmark] |
||||
|
[ArgumentsSource(nameof(ParallelismValues))] |
||||
|
public void NetVips(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.NetVipsResize, maxDegreeOfParallelism); |
||||
|
} |
||||
|
} |
||||
@ -1,52 +0,0 @@ |
|||||
// Copyright (c) Six Labors.
|
|
||||
// Licensed under the Apache License, Version 2.0.
|
|
||||
|
|
||||
using System; |
|
||||
using BenchmarkDotNet.Attributes; |
|
||||
|
|
||||
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
|
||||
{ |
|
||||
public class LoadResizeSaveStress_NonParallel |
|
||||
{ |
|
||||
private LoadResizeSaveStressRunner benchmarks; |
|
||||
|
|
||||
[GlobalSetup] |
|
||||
public void Setup() |
|
||||
{ |
|
||||
this.benchmarks = new LoadResizeSaveStressRunner() { ImageCount = 20 }; |
|
||||
this.benchmarks.Init(); |
|
||||
} |
|
||||
|
|
||||
private void ForEachImage(Action<string> action) |
|
||||
{ |
|
||||
foreach (string image in this.benchmarks.Images) |
|
||||
{ |
|
||||
action(image); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
[Benchmark(Baseline = true, Description = "System.Drawing Load, Resize, Save")] |
|
||||
public void SystemDrawingBenchmark() => this.ForEachImage(this.benchmarks.SystemDrawingResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageSharp Load, Resize, Save")] |
|
||||
public void ImageSharpBenchmark() => this.ForEachImage(this.benchmarks.ImageSharpResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageMagick Load, Resize, Save")] |
|
||||
public void MagickBenchmark() => this.ForEachImage(this.benchmarks.MagickResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageFree Load, Resize, Save")] |
|
||||
public void FreeImageBenchmark() => this.ForEachImage(this.benchmarks.FreeImageResize); |
|
||||
|
|
||||
[Benchmark(Description = "MagicScaler Load, Resize, Save")] |
|
||||
public void MagicScalerBenchmark() => this.ForEachImage(this.benchmarks.MagicScalerResize); |
|
||||
|
|
||||
[Benchmark(Description = "SkiaSharp Canvas Load, Resize, Save")] |
|
||||
public void SkiaCanvasBenchmark() => this.ForEachImage(this.benchmarks.SkiaCanvasResize); |
|
||||
|
|
||||
[Benchmark(Description = "SkiaSharp Bitmap Load, Resize, Save")] |
|
||||
public void SkiaBitmapBenchmark() => this.ForEachImage(this.benchmarks.SkiaBitmapResize); |
|
||||
|
|
||||
[Benchmark(Description = "NetVips Load, Resize, Save")] |
|
||||
public void NetVipsBenchmark() => this.ForEachImage(this.benchmarks.NetVipsResize); |
|
||||
} |
|
||||
} |
|
||||
@ -1,48 +0,0 @@ |
|||||
// Copyright (c) Six Labors.
|
|
||||
// Licensed under the Apache License, Version 2.0.
|
|
||||
|
|
||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using BenchmarkDotNet.Attributes; |
|
||||
|
|
||||
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
|
||||
{ |
|
||||
[MemoryDiagnoser] |
|
||||
public class LoadResizeSaveStress_Parallel |
|
||||
{ |
|
||||
private LoadResizeSaveStressRunner benchmarks; |
|
||||
|
|
||||
[GlobalSetup] |
|
||||
public void Setup() |
|
||||
{ |
|
||||
this.benchmarks = new LoadResizeSaveStressRunner() { ImageCount = 20 }; |
|
||||
this.benchmarks.Init(); |
|
||||
} |
|
||||
|
|
||||
private void ForEachImage(Action<string> action) => Parallel.ForEach(this.benchmarks.Images, action); |
|
||||
|
|
||||
[Benchmark(Baseline = true, Description = "System.Drawing Load, Resize, Save - Parallel")] |
|
||||
public void SystemDrawingBenchmarkParallel() => this.ForEachImage(this.benchmarks.SystemDrawingResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageSharp Load, Resize, Save - Parallel")] |
|
||||
public void ImageSharpBenchmarkParallel() => this.ForEachImage(this.benchmarks.ImageSharpResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageMagick Load, Resize, Save - Parallel")] |
|
||||
public void MagickBenchmarkParallel() => this.ForEachImage(this.benchmarks.MagickResize); |
|
||||
|
|
||||
[Benchmark(Description = "ImageFree Load, Resize, Save - Parallel")] |
|
||||
public void FreeImageBenchmarkParallel() => this.ForEachImage(this.benchmarks.FreeImageResize); |
|
||||
|
|
||||
[Benchmark(Description = "MagicScaler Load, Resize, Save - Parallel")] |
|
||||
public void MagicScalerBenchmarkParallel() => this.ForEachImage(this.benchmarks.MagicScalerResize); |
|
||||
|
|
||||
[Benchmark(Description = "SkiaSharp Canvas Load, Resize, Save - Parallel")] |
|
||||
public void SkiaCanvasBenchmarkParallel() => this.ForEachImage(this.benchmarks.SkiaCanvasResize); |
|
||||
|
|
||||
[Benchmark(Description = "SkiaSharp Bitmap Load, Resize, Save - Parallel")] |
|
||||
public void SkiaBitmapBenchmarkParallel() => this.ForEachImage(this.benchmarks.SkiaBitmapResize); |
|
||||
|
|
||||
[Benchmark(Description = "NetVips Load, Resize, Save - Parallel")] |
|
||||
public void NetVipsBenchmarkParallel() => this.ForEachImage(this.benchmarks.NetVipsResize); |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue