我正在检查ImageProcessorCore,我遇到了一个问题,让我觉得我错过了一些东西:在他的website开发人员显示了一些基准测试,其性能与我测量的时间完全不同在我的示例程序中。我有一个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版。
(顺便说一句:我的开发机器是带有16G内存的i7-5820K和三星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秒。
答案 0 :(得分:2)
使用官方版本可以获得正确的性能,但是使用自己的版本并不意味着构建参数出现问题。和你一样,我克隆了ImageProcessorCore并建立了自己的包。不出所料,我的表现也和你一样糟糕!对于你的12.1 MB test.jpg 需要大约23秒(官方版本需要~3秒。)
问题实际上是使用build命令。默认的.NET Core包命令(dotnet pack
)以Debug
配置构建包。并且Debug构建具有较差的性能,因为它执行精细的符号存储和其他辅助操作。
我使用以下命令在Release
配置中构建了包:
dotnet pack --configuration Release
这次表演与官方版本完全相同( test.jpg 的约3秒!)