작성자: Tom Dykstra
이 문서에서는 메모리 풀에서 Kestrel자동 제거 및 메모리 풀 메트릭 사용을 포함하여 메모리를 관리하기 위한 지침을 제공합니다.
메모리 풀에서 자동 제거
애플리케이션이 유휴 상태이거나 부하가 낮은 경우 , IIS 및 HTTP.sys 사용하는 Kestrel메모리 풀은 메모리 블록을 자동으로 제거합니다. 이 기능은 자동으로 실행되며 수동으로 사용하도록 설정하거나 구성할 필요가 없습니다.
이 자동 제거 기능은 전체 메모리 사용량을 줄이고 다양한 워크로드에서 애플리케이션의 응답성을 유지하는 데 도움이 됩니다. 10 이전 버전의 .NET에서는 풀에서 할당한 메모리가 사용되지 않는 경우에도 예약된 상태로 유지됩니다.
메모리 풀 메트릭 사용
ASP.NET Core 서버 구현에서 사용하는 기본 메모리 풀에는 메모리 사용 패턴을 모니터링하고 분석하는 데 사용할 수 있는 메트릭이 포함됩니다. 메트릭은 이름 "Microsoft.AspNetCore.MemoryPool"아래에 있습니다.
메트릭 및 사용 방법에 대한 자세한 내용은 ASP.NET Core 메트릭을 참조하세요.
메모리 풀 관리
ASP.NET Core는 불필요한 메모리 블록을 제거하여 메모리 풀을 효율적으로 사용하는 것 외에도 종속성 주입을 통해 사용할 수 있는 기본 제공 IMemoryPoolFactory 인터페이스 및 기본 구현을 제공합니다.
다음 코드 예제에서는 기본 제공 메모리 풀 팩터리 구현을 사용하여 메모리 풀을 만드는 간단한 백그라운드 서비스를 보여 줍니다. 이러한 풀은 자동 제거 기능의 이점을 누릴 수 있습니다.
public class MyBackgroundService : BackgroundService
{
private readonly MemoryPool<byte> _memoryPool;
public MyBackgroundService(IMemoryPoolFactory<byte> factory)
{
_memoryPool = factory.Create();
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
await Task.Delay(20, stoppingToken);
// do work that needs memory
// consider checking _memoryPool.MaxBufferSize
var rented = _memoryPool.Rent(100);
rented.Dispose();
}
catch (OperationCanceledException)
{
return;
}
}
}
}
사용자 지정 메모리 풀 팩터리를 사용하려면 다음 예제와 같이 종속성 주입을 구현 IMemoryPoolFactory 하고 등록하는 클래스를 만듭니다. 이러한 방식으로 만든 메모리 풀은 자동 제거 기능의 장점도 있습니다.
services.AddSingleton<IMemoryPoolFactory<byte>,
CustomMemoryPoolFactory>();
public class CustomMemoryPoolFactory : IMemoryPoolFactory<byte>
{
public MemoryPool<byte> Create()
{
// Return a custom MemoryPool implementation
// or the default, as is shown here.
return MemoryPool<byte>.Shared;
}
}
메모리 풀을 사용하는 경우 풀 MaxBufferSize의 .
ASP.NET Core