Memory-mapped File은 Private Bytes 크기에 포함될까요?
예전 글에서,
작업 관리자에서의 "Commit size"가 가리키는 메모리의 의미
; https://www.sysnet.pe.kr/2/0/1850
작업 관리자의 Commit size보다 Working set의 크기가 큰 경우, 그 이유를 설명했었습니다. 다시 설명하자면, 작업 관리자의 Commit size는 "private bytes"를 의미하기 때문입니다.
그런데, 최근에 Commit size보다 Working set의 크기가 클 수 있는 또 다른 사례를 접했습니다. 바로 memory-mapped file입니다. ^^ 간단하게 다음과 같이 코드를 작성해,
using System;
using System.IO.MemoryMappedFiles;
class Program
{
static void Main(string[] args)
{
long size = 1024 * 1024 * 20; // 20MB 크기
using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("test", size))
using (MemoryMappedViewAccessor mmva = mmf.CreateViewAccessor(0, size))
{
for (int i = 0; i < size; i += 8)
{
mmva.Write(i, (double)0.0);
}
Console.WriteLine("Check commit and working set size!");
Console.ReadLine();
}
}
}
실행하면 작업 관리자에서 다음과 같은 수치를 확인할 수 있습니다.
Working set: 30,804K
Commit size: 8,924K
Process Explorer에서는 더 정확한 의미로 확인할 수 있습니다.
Virtual Size: 156,020K
Working Set: 30,804K
Private Bytes: 8,924K (작업 관리자의 Commit size)
정리하면, MMF로 사용된 메모리 영역은 "Private Bytes" 영역에 합산되지 않는다는 것!
(
첨부 파일은 이 글의 예제 코드를 포함합니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]