.net - Hvad menes med 'Memory Pressure'?

Indlæg af Hanne Mølgaard Plasc

Problem



Læsning gennem Tess Ferrandez 'Blog på affaldssamling siger hun, at der er tre mulige årsager til en samling: [2]



  

      
  1. Når du tildeler en ny genstand, og budgettet for generation 0 nås, dvs. hvis det nye objekt ville få det til at gå over budget.

  2.   
  3. Når nogen kalder GC.Collect (Induced GC)

  4.   
  5. Baseret på hukommelsestryk

  6.   



Jeg forstår punkt 1 og 2, men hvad menes med hukommelsestryk i punkt 3?


Jeg havde antaget, at det var den generelle hukommelse, der var tilgængelig i systemet, men hvis systemet virkelig brugte hele sin hukommelse, så tænkte jeg på, at hele systemet ville have blå skærm.


Hvad det faktisk betød min hukommelsestryk ? Hvordan adskiller det sig fra at overskride en generations budget?

Bedste reference


I punkt 3 henviser Tess til 'low memory notification', der sendes af Windows, hvis der ikke er ledig hukommelse. Applikationer kan lytte til denne meddelelse - for at reagere på en eller anden måde før noget værre sker (for eksempel at gemme sine vigtige data osv. Osv.). Velopførende applikationer kan endda forsøge at hjælpe OS ved at trimme deres egen hukommelsesforbrug.


CLR lytter efter meddelelse om lav hukommelse. Når det sker, udløses GC og generelt gør GCs mere aggressiv. Fordelene er gensidige, fordi reduktionen af ​​trykket på hukommelse hjælper alle applikationer i systemet (herunder selve .NET-appen).


Når nøjagtigt lav hukommelse er sendt, er det ikke så godt dokumenteret. Ifølge kommentaren i den interne System.Runtime.Caching.PhysicalMemoryMonitor -klasse, der igen er baseret på kommentarer fra interne Windows-implementeringer, signaliseres den lave hukommelsesmeddelelse, når ca. 97-99\% fysisk hukommelse er optaget (afhængigt af den fysiske RAM-mængde installeret i systemet). [3]