이 문서에서는 진단 도구 및 앱에서 Blazor WebAssembly 이를 사용하는 방법을 설명합니다.
모든 시나리오에 대한 필수 구성 요소
.NET WebAssembly 빌드 도구를 설치합니다.
dotnet workload install wasm-tools
WebAssembly 앱에서 메모리를 사용하는 방법 및 메모리 누수 문제를 해결하는 방법
앱의 프로젝트 파일(.csproj)에서 조사 기간 동안 다음 속성을 추가합니다.
<PropertyGroup>
<EnableDiagnostics>true</EnableDiagnostics>
</PropertyGroup>
경고
성능에 부정적인 영향을 주므로 프로덕션 환경에서 진단을 사용하도록 설정하지 마세요.
wasm-tools 워크로드를 사용하여 앱을 빌드합니다.
브라우저에서 앱을 열고 문제가 있는 페이지 또는 구성 요소로 이동합니다.
JavaScript API를 호출 collectGcDump 하여 관리되는 메모리 덤프를 가져옵니다.
globalThis.getDotnetRuntime(0).collectGcDump();
브라우저 개발자 도구 콘솔 또는 앱의 JavaScript 코드에서 이전 API를 호출합니다.
.nettrace 파일은 브라우저에서 로컬 폴더(일반적으로 Windows의 폴더)Downloads로 다운로드됩니다.
.gcdump 도구를 사용하여 덤프를 dotnet-gcdump 형식으로 변환합니다. 변환된 .gcdump 파일을 보려면 Visual Studio 또는 PrefView를 사용합니다.
자세한 내용은 dotnet-gcdump에서 캡처된 GC 덤프 보기를 참조하세요.
WebAssembly 앱에서 CPU를 사용하는 방법 및 느리거나 핫한 메서드를 찾는 방법
앱의 프로젝트 파일(.csproj)에서 조사 기간 동안 다음 속성을 추가합니다.
<PropertyGroup>
<EnableDiagnostics>true</EnableDiagnostics>
<!-- Disable debugger -->
<WasmDebugLevel>0</WasmDebugLevel>
<!-- Sampling in all methods, see below for filtering options -->
<WasmPerformanceInstrumentation>all</WasmPerformanceInstrumentation>
</PropertyGroup>
경고
성능에 부정적인 영향을 주므로 프로덕션 환경에서 진단을 사용하도록 설정하지 마세요.
워크로드를 사용하여 앱을 빌드합니다 wasm-tools .
브라우저에서 앱을 열고 문제가 있는 페이지 또는 구성 요소로 이동합니다.
JavaScript API를 호출하여 CPU 샘플을 60초 동안 수집을 시작합니다.
globalThis.getDotnetRuntime(0).collectCpuSamples({durationSeconds: 60});
브라우저 개발자 도구 콘솔 또는 앱의 JavaScript 코드에서 이전 API를 호출합니다.
앱 사용을 시작하여 문제가 있는 코드를 실행합니다.
미리 정의된 기간이 지나면 브라우저는 파일을 로컬 폴더(일반적으로 Windows의 .nettrace 폴더)로 다운로드 Downloads 합니다. 파일을 보려면 .nettrace Visual Studio 또는 PrefView를 사용합니다.
자세한 내용은 EventPipe를 사용하여 .NET 애플리케이션을 추적합니다.
Timing-Allow-Origin HTTP 헤더를 사용하면 보다 정확한 시간 측정을 수행할 수 있습니다.
WebAssembly 앱에서 내보낸 메트릭을 관찰하는 방법
앱의 프로젝트 파일(.csproj)에서 조사 기간 동안 다음 속성을 추가합니다.
<PropertyGroup>
<EnableDiagnostics>true</EnableDiagnostics>
<MetricsSupport>true</MetricsSupport>
<EventSourceSupport>true</EventSourceSupport>
</PropertyGroup>
경고
성능에 부정적인 영향을 주므로 프로덕션 환경에서 진단을 사용하도록 설정하지 마세요.
워크로드를 사용하여 앱을 빌드합니다 wasm-tools .
브라우저에서 앱을 열고 문제가 있는 페이지 또는 구성 요소로 이동합니다.
JavaScript API를 호출하여 60초 동안 메트릭 수집을 시작합니다 collectMetrics.
globalThis.getDotnetRuntime(0).collectMetrics({durationSeconds: 60});
브라우저 개발자 도구 콘솔 또는 앱의 JavaScript 코드에서 이전 API를 호출합니다.
미리 정의된 기간이 지나면 브라우저는 파일을 로컬 폴더(일반적으로 Windows의 .nettrace 폴더)로 다운로드 Downloads 합니다. 파일을 보려면 .nettrace Visual Studio 또는 PrefView를 사용합니다.
자세한 내용은 EventPipe를 사용하여 .NET 애플리케이션을 추적합니다.
진단 통합을 사용하도록 설정하는 MSBuild 속성
| 재산 | 기본값 | 값을 ...로 설정합니다. | 설명 |
|---|---|---|---|
<EnableDiagnostics> |
false |
true |
WebAssembly 성능 추적을 지원합니다. |
<WasmPerformanceInstrumentation> |
값 없음 | 표를 참조하세요† | 샘플링 프로파일러에 필요한 계측을 사용하도록 설정합니다. 이 속성은 callspec 구문을 따릅니다. † 허용 가능한 값은 다음 표를 참조하세요. |
<MetricsSupport> |
false |
true |
System.Diagnostics.Metrics 지원을 사용하도록 설정합니다. 자세한 내용은 네임스페이스를System.Diagnostics.Metrics 참조하세요. |
<EventSourceSupport> |
false |
true |
EventPipe 지원을 사용하도록 설정합니다. 자세한 내용은 진단 및 계측: 관찰성 및 원격 분석을 참조하세요. |
다음 표에서는 허용되는 <WasmPerformanceInstrumentation> 값에 대해 설명합니다.
<WasmPerformanceInstrumentation> 값 |
설명 |
|---|---|
all |
모든 어셈블리 |
program |
진입점 조립 |
{ASSEMBLY} |
어셈블리를 지정합니다({ASSEMBLY}). |
M:Type:{METHOD} |
메서드{METHOD}()를 지정합니다. |
N:{NAMESPACE} |
네임스페이스({NAMESPACE})를 지정합니다. |
T:{TYPE} |
형식({TYPE})을 지정합니다. |
+EXPR |
표현 포함 |
-EXPR |
표현 제외 |
코드는 추적을 수집할 수 있도록 주 브라우저 루프에 자주 양보해야 합니다. 장기 실행 루프를 실행할 때 내부 진단 버퍼가 오버플로될 수 있습니다.
주의
프로파일러 및 진단 도구를 사용하도록 설정하면 크기 및 성능에 부정적인 영향을 주므로 프로파일러를 사용하도록 설정된 프로덕션용 앱을 게시하지 마세요.
추가 리소스
- EventPipe 는 ETW 및 perf_events 유사한 추적 데이터를 수집하는 데 사용되는 런타임 구성 요소입니다.
- .NET Core에서 사용할 수 있는 진단 도구는 무엇인가요?
- .NET 진단 도구
-
dotnet/diagnosticsGitHub 리포지토리 - NuGet 패키지
Microsoft.Diagnostics.NETCore.Client
ASP.NET Core