diff --git a/.gitignore b/.gitignore index 39720ac7..8f50b799 100644 --- a/.gitignore +++ b/.gitignore @@ -223,3 +223,6 @@ QRCoder/PortabilityAnalysis.html # Unaccepted approval files QRCoderTests/*.received.* *.received.txt + +# Benchmarks +BenchmarkDotNet.Artifacts/ diff --git a/QRCoderBenchmarks/BitmapByteQRCode.cs b/QRCoderBenchmarks/BitmapByteQRCodeRendererBenchmark.cs similarity index 93% rename from QRCoderBenchmarks/BitmapByteQRCode.cs rename to QRCoderBenchmarks/BitmapByteQRCodeRendererBenchmark.cs index e762ed19..2e31a146 100644 --- a/QRCoderBenchmarks/BitmapByteQRCode.cs +++ b/QRCoderBenchmarks/BitmapByteQRCodeRendererBenchmark.cs @@ -4,11 +4,11 @@ namespace QRCoderBenchmarks; [MemoryDiagnoser] -public class BitmapByteQRCodeBenchmark +public class BitmapByteQRCodeRendererBenchmark { private readonly Dictionary _samples; - public BitmapByteQRCodeBenchmark() + public BitmapByteQRCodeRendererBenchmark() { var eccLvl = QRCoder.QRCodeGenerator.ECCLevel.L; _samples = new Dictionary() diff --git a/QRCoderBenchmarks/PngByteQRCode.cs b/QRCoderBenchmarks/PngByteQRCodeRendererBenchmark.cs similarity index 93% rename from QRCoderBenchmarks/PngByteQRCode.cs rename to QRCoderBenchmarks/PngByteQRCodeRendererBenchmark.cs index befc7d86..ceefb637 100644 --- a/QRCoderBenchmarks/PngByteQRCode.cs +++ b/QRCoderBenchmarks/PngByteQRCodeRendererBenchmark.cs @@ -4,11 +4,11 @@ namespace QRCoderBenchmarks; [MemoryDiagnoser] -public class PngByteQRCodeBenchmark +public class PngByteQRCodeRendererBenchmark { private readonly Dictionary _samples; - public PngByteQRCodeBenchmark() + public PngByteQRCodeRendererBenchmark() { var eccLvl = QRCoder.QRCodeGenerator.ECCLevel.L; _samples = new Dictionary() diff --git a/QRCoderBenchmarks/Program.cs b/QRCoderBenchmarks/Program.cs index 66129296..813b138e 100644 --- a/QRCoderBenchmarks/Program.cs +++ b/QRCoderBenchmarks/Program.cs @@ -1,3 +1,4 @@ +using System.Reflection; using BenchmarkDotNet.Running; -BenchmarkRunner.Run(typeof(Program).Assembly); +BenchmarkSwitcher.FromAssembly(Assembly.GetExecutingAssembly()).Run(args); diff --git a/QRCoderBenchmarks/QRCodeGenerator.cs b/QRCoderBenchmarks/QRCodeGeneratorBenchmark.cs similarity index 96% rename from QRCoderBenchmarks/QRCodeGenerator.cs rename to QRCoderBenchmarks/QRCodeGeneratorBenchmark.cs index c98973de..2f24e019 100644 --- a/QRCoderBenchmarks/QRCodeGenerator.cs +++ b/QRCoderBenchmarks/QRCodeGeneratorBenchmark.cs @@ -3,7 +3,7 @@ namespace QRCoderBenchmarks; [MemoryDiagnoser] -public class QRCodeGenerator +public class QRCodeGeneratorBenchmark { [Benchmark] public void CreateQRCode() diff --git a/QRCoderBenchmarks/QRCodeRendererBenchmark.cs b/QRCoderBenchmarks/QRCodeRendererBenchmark.cs new file mode 100644 index 00000000..d4fef5e1 --- /dev/null +++ b/QRCoderBenchmarks/QRCodeRendererBenchmark.cs @@ -0,0 +1,49 @@ +using BenchmarkDotNet.Attributes; +using QRCoder; + +namespace QRCoderBenchmarks; + +[MemoryDiagnoser] +public class QRCodeRendererBenchmark +{ + private readonly Dictionary _samples; + + public QRCodeRendererBenchmark() + { + var eccLvl = QRCoder.QRCodeGenerator.ECCLevel.L; + _samples = new Dictionary() + { + { "small", QRCoder.QRCodeGenerator.GenerateQrCode("ABCD", eccLvl) }, + { "medium", QRCoder.QRCodeGenerator.GenerateQrCode("https://github.com/Shane32/QRCoder/blob/f89aa90081f369983a9ba114e49cc6ebf0b2a7b1/QRCoder/Framework4.0Methods/Stream4Methods.cs", eccLvl) }, + { "big", QRCoder.QRCodeGenerator.GenerateQrCode( new string('a', 2600), eccLvl) } + }; + } + + [Benchmark] + public void RenderQRCodeSmall() + { + var qrCode = new QRCode(_samples["small"]); + using var bmp = qrCode.GetGraphic(10); + } + + [Benchmark] + public void RenderQRCodeMedium() + { + var qrCode = new QRCode(_samples["medium"]); + using var bmp = qrCode.GetGraphic(10); + } + + [Benchmark] + public void RenderQRCodeBig() + { + var qrCode = new QRCode(_samples["big"]); + using var bmp = qrCode.GetGraphic(10); + } + + [Benchmark] + public void RenderQRCodeHuge() + { + var qrCode = new QRCode(_samples["big"]); + using var bmp = qrCode.GetGraphic(50); + } +} diff --git a/QRCoderBenchmarks/QRCoderBenchmarks.csproj b/QRCoderBenchmarks/QRCoderBenchmarks.csproj index 08fa5c6d..a3f98c55 100644 --- a/QRCoderBenchmarks/QRCoderBenchmarks.csproj +++ b/QRCoderBenchmarks/QRCoderBenchmarks.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net8.0-windows enable enable $(NoWarn);CA1822