3

我目前正在检查 ImageProcessorCore 并且遇到了一个问题,让我觉得我错过了一些东西:在他的网站上,开发人员显示了一些性能与我在示例程序中测量的时间完全不同的基准。我有一个 2.3 MB (3853x2569) jpg 图像,我只想从中获取宽度和高度(目前),所以我创建了这个小的 .NET 核心控制台测试应用程序:

using ImageProcessorCore;
using System;
using System.IO;

namespace ImageProcessorCoreTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            using (FileStream input = File.OpenRead(@"c:\test\a.jpg"))
            {
                DateTime start = DateTime.Now;
                Image image = new Image(input);

                int w = image.Width;
                int h = image.Height;

                double duration = (DateTime.Now.Subtract(start)).TotalMilliseconds;

                Console.WriteLine("Image size is " + w.ToString() + "x" + h.ToString() + " Pixels (" + duration.ToString() + "ms)");
                Console.ReadLine();
            }
        }
    }
}

此操作需要超过 11 秒(与上面提到的基准相比,因子 100)来读取图像并获取大小。我究竟做错了什么?

我在 Windows 10 Pro 64 上使用 1.0.0 版本。

(顺便说一句:我的开发机器是 i7-5820K,配备 16G RAM 和 Samsung Pro 950 NVMe 驱动器,所以我认为硬件很可能不会成为瓶颈。)

更新 1:重新编译 ImageProcessorCore 并创建一个发布 nuget 包,然后我在我的(发布)示例程序中使用它,不幸的是只会将持续时间缩短到 10 秒多一点。

更新 2:我刚刚将测试图像(外部)调整为 2000x1334 像素。这将时间显着降低到 849 毫秒,考虑到在开发人员的基准测试中给定的 56 毫秒用于读取、调整大小和再次写入,这仍然很奇怪。

更新 3:我现在使用可以与您共享的测试图像进​​行测试。新图像为 11416x6380 像素 (11.5 MB),使用上述代码需要 >17 秒。你可以在这里下载:http: //orig01.deviantart.net/92d3/f/2010/110/7/2/pla_sf_3_by_recon071.jpg

更新 4:当我使用来自 MyGet 存储库的包时,最新测试图像的时间(请参阅更新 3)下降到 2.4 秒。

4

1 回答 1

3

您使用官方构建获得了正确的性能,但不是您自己的显然意味着您的构建参数有问题。和你一样,我克隆了ImageProcessorCore并构建了自己的包。不出所料,我的表现也和你一样糟糕!对于您的 12.1 MB test.jpg大约需要 23 秒(官方版本需要大约 3 秒。)

问题实际上出在 build 命令上。默认的 .NET Core 包命令 ( ) 在配置dotnet pack中构建包。Debug并且 Debug 构建的性能较差,因为它执行复杂的符号存储和其他辅助操作。

Release我使用以下命令在配置中构建了包:

dotnet pack --configuration Release

这次的性能与官方版本完全相同(test.jpg约 3 秒!)

于 2016-10-01T16:06:24.620 回答