Windows - Hukommelse lækager og træg brugeroplevelse

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lidt af en massiv hukommelseslækage i et af mine applikationer: min computer ville gå meget langsomt, når lækagen skete. Før jeg løser lekken, vil jeg gerne forstå, hvorfor det sker.


Tag f.eks. Følgende lille C ++ kode med en lækage:


size\_t size = 1024 * 1024 * 1024;
char* buf = new char[size];
std::fill\_n(buf, size, 'o');
std::string pause;
std::getline(std::cin, pause);


Fra min forståelse af virtuel hukommelse, disk caches osv., Ville jeg forvente, at mens ovennævnte kode venter på brugerindgang på den sidste linje, bliver dens 1 gigabyte buffer ikke længere brugt, så operativsystemet skal gradvist bytte det til disk og 'glemme' det. Jeg (brugeren) ville lide en afmatning i nogen tid, men tingene ville vende tilbage til normal efter en tid.


Dette sker ikke på mit system (Windows XP, 32-bit, med 2 GB RAM). Når jeg kører ovenstående kode (to gange, i 2 separate cmd windows, for at spilde al tilgængelig hukommelse), føler jeg mig en stor afmatning af mit system; det bliver bedre efter et par minutter, men det går ikke tæt på maksimal ydelse. Systemet vender tilbage til det normale, når jeg opsiger de lækre 'applikationer'.


Bare for at vise nogle tal, brugte jeg kompilering af en eller anden kildekode som en præstationsprøve. Jeg kompilerede det flere gange i træk for at foretage flere målinger (i sekunder).



  • Før lækagen: 14, 2, 2, 3, 2, ...

  • Efter lækagen: 183, 40, 9, 7, 9, ...

  • Efter lukkede 'applikationer': 12, 2, 2, ...



En afmatning på 3x hvor jeg ville forvente ingen. Hvordan kan det forklares?

Bedste reference


Windows-swap-filen er af fin størrelse. Hvis du fylder det meste ud med din 1 GB buffer, skal systemet arbejde hårdere, bytte resten af ​​hukommelsen ind og ud af, hvad der er lidt tilbage.