요구사항: 개발 과정에서 동일한 두 기능 메서드가 요구사항을 충족할 수 있지만, 성능 문제로 호출 시 최적의 성능 방법을 선택합니다. 코드 성능을 어떻게 테스트할까요?
성능 벤치마킹은 프로그래머가 두 코드 스니펫이나 메서드의 성능을 비교하는 데 도움을 주며, 이는 코드 재작성이나 리팩토링에 좋은 정량화 기준이 될 수 있습니다. 성능 벤치마크가 없으면, 방법 A를 방법 B로 바꿀 때 육안으로 성능 차이를 어떻게 알 수 있을지 상상하기 어렵습니다.
BenchmarkDotNet은 공식 웹사이트에 있는 강력한 .Net 성능 벤치마크 라이브러리입니다하이퍼링크 로그인이 보입니다.
먼저, 새로운 .NET Core 3.1 콘솔 프로젝트를 만들 것입니다. 프로젝트 이름은 BenchmarkTest입니다
nuget 명령어를 사용해 BenchmarkDotNet을 설치하세요. 코드는 다음과 같습니다:
프로젝트를 더블 클릭하면 프로젝트의 목표 플랫폼을 다음과 같이 수정하세요:
저희는 각각 .NET Framework 4.7.2와 .NET Core 3.1 프레임워크 하에서 TestMD5와 TestSHA1 메서드의 성능을 테스트합니다.
코드는 다음과 같습니다:
다음 오류가 발생하여 실행을 시도하세요:
벤치마크 검증: 벤치마크를 정의하는 어셈블리 벤치마크테스트는 최적화되지 않았습니다 벤치마크는 최적화가 활성화된 상태(아마도 DEBUG 구성)로 만들어졌습니다. 제발, RELEASE 내에서 빌드해 주세요. 벤치마크를 디버깅하고 싶으시다면, 다음을 참고해 주세요.하이퍼링크 로그인이 보입니다.
프로젝트를 RELEASE 모드로 전환하세요아래와 같이 프로젝트를 다시 시작하는 방법:
* 요약 *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November2018Update/19H2) 인텔 코어 i5-8259U CPU 2.30GHz (커피 레이크), 1개의 CPU, 8개의 논리 코어와 4개의 물리 코어 .NET Core SDK=5.0.103 [호스트] : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT .NET 4.7.2 : .NET Framework 4.8 (4.8.4300.0), x64 RyuJIT .NET Core 3.1 : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT
| 방법 | 직업 | 런타임 | 미운 | 오류 | StdDev | 민 | 맥스 | 중앙값 | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 미국 | 0.0804 미국 | 0.1045 미국 | 3.958 미국 | 4.318 미국 | 4.123 미국 | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 미국 | 0.0793 미국 | 0.1085 미국 | 3.926 미국 | 4.289 미국 | 4.003 미국 | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 미국 | 0.0122 미국 | 0.0114 미국 | 1.202 미국 | 1.238 미국 | 1.214 미국 | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 미국 | 0.0186 미국 | 0.0165 미국 | 1.284 미국 | 1.336 미국 | 1.307 미국 |
* 힌트 * 아웃라이어 TestContext.TestSHA1: .NET 4.7.2 -> 1개의 이상치가 제거되었습니다 (5.52 미국) TestContext.TestSHA1: .NET Core 3.1 -> 1개의 이상치가 제거되었습니다 (1.37 미국)
* 전설들 * 평균 : 모든 측정값의 산술 평균 오차 : 99.9% 신뢰구간의 절반 StdDev : 모든 측정값의 표준편차 최소 : 최소 최대 : 최대 중앙값 : 모든 측정값의 상위 절반을 구분하는 값(50백분위수) 1 미국 : 1 마이크로초 (0.000001초)
***** 벤치마크러너: 엔드 ***** ** 남은 벤치마크는 0개였습니다 ** 실행 시간: 00:01:14 (74초), 실행 벤치마크: 4
전 세계 총 시간: 00:01:20 (80.63초), 실행 벤치마크: 4 * 유물 정리 * 실행되면 테스트 결과는 csv, html, md 등 다양한 형식으로 프로젝트 \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results 폴더에 저장됩니다.
메모:SimpleJob 대상 프레임 선택이 잘못되어 제대로 실행되지 않을 수 있습니다다음과 같습니다:
리소스:하이퍼링크 로그인이 보입니다.
|