😎

AsposeとZXing.NetのQRデコード速度ベンチ

に公開

有償のライブラリAsposeと、業界標準といっていいOSSのZXingの.NETラッパーのベンチマークを実施してみました。

結論から言うと、処理速度はZXing.Netの方が高速でした。

特に、QRと誤認しやすいノイズののった画像だとAsposeだと長時間処理がかかることも多かったため、基本的にはZXing.Netを今後は利用しようかなと思います。

評価環境

  • AMD Ryzen 9 7950X, 1 CPU, 32 logical and 16 physical cores 96GB Memory
  • Windows 11 (10.0.26100.3476)
  • .NET 8.0.14
  • .NET Framework 4.8.1
  • BenchmarkDotNet v0.14.0
  • ZXing.Net 0.16.10
  • ZXing.Net.Bindings.SkiaSharp 0.16.21
  • BitMiracle.LibTiff.NET 2.4.660

評価データ

  • JPEG 300dpi カラー
  • TIFF 300dpi 二値

評価結果

.NET 8.0

.NET 8.0は、System.Drawing.BitmapがWindows環境でしか利用できないので、バイト列からのデコードのみを評価します。

処理速度はZXingが高速ですが、AllocatedはZXingの場合は.NETの非管理のUnmanaged領域が利用されているので、下記の数字を鵜呑みにはしないでください。

TIFF

Method Mean Error StdDev Median Gen0 Gen1 Gen2 Allocated
Aspose_HighPerformance 94.52 ms 1.877 ms 3.661 ms 95.85 ms 13333.3333 2333.3333 1333.3333 332.7 MB
Aspose_NormalQuality 136.86 ms 2.682 ms 2.981 ms 137.49 ms 28500.0000 2500.0000 1500.0000 584.1 MB
Aspose_HighQuality 211.89 ms 2.318 ms 1.936 ms 211.65 ms 61000.0000 3000.0000 2000.0000 1096.9 MB
Aspose_MaxQuality 547.61 ms 10.850 ms 31.130 ms 556.16 ms 98000.0000 4000.0000 3000.0000 1802.95 MB
ZXing 23.97 ms 0.294 ms 0.275 ms 23.94 ms 937.5000 906.2500 906.2500 7.64 MB

JPEG

Method Mean Error StdDev Gen0 Gen1 Gen2 Allocated
Aspose_HighPerformance 488.69 ms 9.683 ms 9.944 ms 104000.0000 86000.0000 3000.0000 1745.5 MB
Aspose_NormalQuality 568.23 ms 11.336 ms 17.311 ms 128000.0000 92000.0000 4000.0000 2133.61 MB
Aspose_HighQuality 1,823.70 ms 11.215 ms 9.365 ms 375000.0000 140000.0000 11000.0000 5920.84 MB
Aspose_MaxQuality 2,266.67 ms 39.653 ms 37.091 ms 419000.0000 145000.0000 14000.0000 6836.44 MB
ZXing 99.72 ms 1.676 ms 1.646 ms 500.0000 500.0000 500.0000 9.92 MB

.NET Framework 4.5.1

こちらもZXingがすべての面において高速です。

TIFF

Method Image Mean Error StdDev Gen0 Gen1 Gen2 Allocated
Aspose_HighPerformance Bitmap 92.80 ms 1.845 ms 5.050 ms 33500.0000 3166.6667 1000.0000 228.37 MB
Aspose_NormalQuality Bitmap 155.42 ms 3.107 ms 7.323 ms 75250.0000 5500.0000 1750.0000 507.25 MB
Aspose_HighQuality Bitmap 358.44 ms 7.134 ms 14.412 ms 168000.0000 10000.0000 3000.0000 1058.71 MB
Aspose_MaxQuality Bitmap 690.29 ms 13.701 ms 25.053 ms 265000.0000 9000.0000 3000.0000 1781.53 MB
ZXing Bitmap 33.47 ms 0.641 ms 0.629 ms 875.0000 812.5000 812.5000 7.56 MB
Aspose_HighPerformance Byte Array 91.08 ms 1.769 ms 2.593 ms 34000.0000 3000.0000 1500.0000 228.42 MB
Aspose_NormalQuality Byte Array 156.52 ms 3.107 ms 4.651 ms 75000.0000 5750.0000 1750.0000 506.72 MB
Aspose_HighQuality Byte Array 377.58 ms 7.539 ms 19.595 ms 168000.0000 9000.0000 3000.0000 1062.77 MB
Aspose_MaxQuality Byte Array 791.26 ms 15.803 ms 41.631 ms 266000.0000 12000.0000 4000.0000 1781.51 MB
ZXing Byte Array 32.60 ms 0.324 ms 0.253 ms 1000.0000 906.2500 906.2500 7.65 MB

JPEG

Method Image Mean Error StdDev Gen0 Gen1 Gen2 Allocated
Aspose_HighPerformance Bitmap 688.03 ms 13.532 ms 27.026 ms 306000.0000 124000.0000 25000.0000 1772.4 MB
Aspose_NormalQuality Bitmap 803.28 ms 16.002 ms 38.951 ms 368000.0000 118000.0000 23000.0000 2191.91 MB
Aspose_HighQuality Bitmap 3,240.31 ms 62.227 ms 80.912 ms 1051000.0000 217000.0000 15000.0000 6379.14 MB
Aspose_MaxQuality Bitmap 4,126.77 ms 76.796 ms 71.835 ms 1168000.0000 233000.0000 20000.0000 7319.55 MB
ZXing Bitmap 89.34 ms 0.872 ms 0.728 ms 1166.6667 500.0000 500.0000 13.66 MB
Aspose_HighPerformance Byte Array 683.44 ms 12.189 ms 17.088 ms 304000.0000 122000.0000 23000.0000 1765.53 MB
Aspose_NormalQuality Byte Array 816.61 ms 16.051 ms 34.893 ms 369000.0000 124000.0000 24000.0000 2195.32 MB
Aspose_HighQuality Byte Array 3,265.05 ms 64.554 ms 113.061 ms 1055000.0000 226000.0000 19000.0000 6382.87 MB
Aspose_MaxQuality Byte Array 4,138.01 ms 81.408 ms 90.485 ms 1168000.0000 230000.0000 19000.0000 7318.79 MB
ZXing Byte Array 115.91 ms 1.773 ms 1.481 ms 600.0000 600.0000 600.0000 9.93 MB

Discussion