2016-10-01 2 views
2

현재 ImageProcessorCore를 검토 중입니다. 뭔가 놓치고있는 것처럼 느껴지는 문제가 발생했습니다. 그의 website에서 개발자는 샘플 프로그램에서 측정 한 시간과 완전히 다른 성능을 가진 벤치 마크를 보여줍니다. 나는 단지 폭과 높이를 (지금은) 취득하는 2.3 MB (3853x2569) JPG 이미지를, 그래서이 작은 .NET 코어 콘솔 테스트 응용 프로그램 생성 :ImageProcessorCore : 이미지를 여는 데 11 초 이상 걸립니다. 무엇이 없습니까?

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 배)가 필요합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

내가 프로 윈도우 10 버전 1.0.0을 사용하고 64

(BTW : 내 dev에 기계는 16G RAM과 삼성 프로 950의 NVMe 드라이브가있는 i7-5820K, 그래서 아마도 하드웨어입니다 병목이 될 수 없다, 나는 생각한다)

업데이트 1 :. 다시 컴파일 ImageProcessorCore 나는 다음 내 (자료) 샘플 프로그램에서 사용하는 릴리스 nuget 패키지를 만드는 것은 불행하게도 단지 아래로 약간 이상에 시간을 제공합니다 10 초.

업데이트 2 : 방금 테스트 이미지의 크기를 2000x1334 픽셀로 재조정했습니다. 이것은 현저하게 시간을 849 밀리 초로 줄였습니다. dev에 대한 벤치 마크에서 읽기, 크기 조정 및 다시 쓰는 데 주어진 56ms를 고려하면 여전히 이상합니다.

업데이트 3 : 이제 테스트를 위해 나와 공유 할 수있는 테스트 이미지를 사용합니다. 새 이미지는 11416x6380 픽셀 (11.5MB)이며 위의 코드에서 17 초를 초과합니다. 당신은 여기에서 다운로드 할 수 있습니다 : http://orig01.deviantart.net/92d3/f/2010/110/7/2/pla_sf_3_by_recon071.jpg

업데이트 4 : 나는 MyGet 저장소에서 패키지를 사용하면 최신 테스트 이미지에 대한 시간 (업데이트 3 참조) 2.4 초에 내려갑니다.

+0

얼마나 큰 너의 시험 이미지 야? – zaitsman

+0

나는 [this] (http://orig01.deviantart.net/92d3/f/2010/110/7/2/pla_sf_3_by_recon071.jpg) ~ 11.5 MB jpg 파일에서 코드를 시험해 보았습니다. [myget] (https://www.myget.org/feed/imageprocessor/package/nuget/ImageProcessorCore)에서 사용할 수있는 _ImageProcessorCore_ 버전 _1.0.0-alpha1058_을 사용했습니다. 내 컴퓨터는 _i5-6200U CPU @ 2입니다.30 GHz, 8 GB RAM, Travelstar Z5K1000 디스크 드라이브, Windows 10 Pro 64 bit_ 실행. 테스트 이미지 크기가 너보다 훨씬 크지 만 평균 5 초가 걸립니다. 테스트 이미지를 공유 할 수 있습니까? –

+0

myget의 _ImageProcessorCore_ [패키지 기록] (https://www.myget.org/feed/imageprocessor/package/nuget/ImageProcessorCore)에 따르면 지난 버전은 _Tue, 2020 년 9 월 27 일 _에 게시되었습니다. 그러나 귀하의 버전은 _Sep 30 2016_에 게시됩니다. 다른 출처에서 수집 했습니까? 그것도 공유하는 것을 고려하십시오. –

답변

2

공식 빌드에서는 올바른 성능을 얻지 만 빌드 매개 변수에 문제가 있음을 분명히 의미하지는 않습니다. 너와 마찬가지로 나는 ImageProcessorCore을 복제하고 내 패키지를 만들었다. 당연히, 나는 또한 당신이 그랬던 것처럼 나쁜 성과를 얻고있었습니다! 귀하의 12.1 MB에 대한 test.jpg 걸렸어 ~ 23 초 (공식 빌드와 ~ 3s 소요)

문제는 실제로 빌드 명령입니다. 기본 .NET 코어 패키지 명령 (dotnet pack)은 Debug 구성으로 패키지를 빌드합니다. 디버그 빌드는 정교한 기호 저장 및 기타 보조 작업을 수행하므로 성능이 떨어집니다.

나는 다음과 같은 명령을 Release 구성에서 패키지를 구축 :

dotnet pack --configuration Release 

성능이 공식 빌드와 정확히 동일하다이 시간 (~ test.jpg를에 대한 3S!)

+1

좋은 장소! ImageProcessorCore가 솔루션의 다른 프로젝트 (다른 ​​곳에 빌드 된 외부 참조 dll로 사용하는 대신)로 사용하고 릴리스 모드에서 솔루션을 빌드하는 경우 동일한 효과가 있습니까? –

+0

시도하지는 않았지만 빌드 엔진이 소스를 빌드하는 데 사용하는 구성이 전부입니다. 현재 ImageProcessorCore는 _.NET Core_ build 엔진으로 구축되었으며 _.NET Core_ runtime을 대상으로합니다. Visual Studio에 추가하면 _MSBuild_ 및 _.NET Framework_로 각각 변경됩니다. 두 빌드 엔진 모두'Debug'와'Release' 설정을 가지고 있습니다. 그러나 두 경우 모두'Release' 빌드가 더 잘 수행 될 것이라고 안전하게 말할 수 있습니다. –

+0

3 초가 지금 우리가 얻는 전부라고 생각합니다. 결국 그것은 알파 소프트웨어이고 "성능 향상"은 dev의 로드맵에있는 주제 중 하나입니다. 그래서 나는 그의 위대한 업적에 대해 감사 드리고 싶습니다. 멀리. 코드를 직접 조작 할 수있을만큼의 경험이 있는지는 잘 모르겠지만 지금은 분명히 시도 할 것입니다. – Robert

관련 문제