다음을 통해 공유


ASP.NET Core Blazor WebAssembly 이벤트 파이프 진단

이 문서에서는 진단 도구 및 앱에서 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 표현 제외

코드는 추적을 수집할 수 있도록 주 브라우저 루프에 자주 양보해야 합니다. 장기 실행 루프를 실행할 때 내부 진단 버퍼가 오버플로될 수 있습니다.

주의

프로파일러 및 진단 도구를 사용하도록 설정하면 크기 및 성능에 부정적인 영향을 주므로 프로파일러를 사용하도록 설정된 프로덕션용 앱을 게시하지 마세요.

추가 리소스