windows - Identificer ejeren af ​​indbygget hukommelse, der bruges af C # -programmet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på en C # -applikation, som er designet til at køre i systembakken hele tiden. Jeg vil derfor gerne minimere mængden af ​​hukommelse, som applikationen bruger, når den er tomgang. Brug af Windows Perfmon og Windows Task Manager har jeg fået nogle tal for brug af tomgangshukommelse.



  • Windows XP TaskManager - Mem Usage - 96,300K

  • PerfMon

    • .NET CLR-hukommelse

      • # bytes i alle hoveder - 34.513.708

      • # I alt forpligtede bytes - 40.591.360

      • # I alt reserveret bytes - 50.319.360





Jeg tror, ​​at disse tal betyder, at min ansøgning er blevet tildelt 96 MB hukommelse af Windows. 50 MB af dette er blevet allokeret til CLR. CLR har uddelt 40mb af dette.


Er der nogen måde at finde ud af, hvad de andre 46mb hukommelse, der ikke er blevet tildelt CLR, bruges? Jeg antager, at dette vil være en kombination af hukommelse, der bruges til at indlæse DLL'er i processen og hukommelsen, der anvendes af denne native kode .


EDIT: Jeg har downloadet VMMap og fundet følgende.



  • Privat

    • I alt - 72mb

    • Managed Heap - 25mb

    • Stak - 16mb (Synes ret stor)

    • Private data - 13mb (Ikke sikker på hvad dette er)

    • Billede - 8mb (for det meste. NET DLL'er)

    • Sidebord - 6mb (Synes ret stor)

    • Heap - 3mb




Kan nogen foreslå en fortolkning for Stack, Private Data og Page Table figures?


BEMÆRK: De tællere, jeg oprindeligt citerede, viser nu nogle bizarre tal.



  • Windows XP TaskManager - Mem Anvendelse - 43,628K

  • PerfMon

    • .NET CLR-hukommelse

      • # bytes i alle hoveder - 20mb

      • # I alt forpligtede bytes - 23mb

      • # I alt reserveret bytes - 50mb





Dette tyder på, at CLR har reserveret mere hukommelse, end der er blevet tildelt til processen. Det kan naturligvis ikke være sandt, så TaskManager må kun vise, hvad der er blevet indlæst i øjeblikket.

Bedste reference


Bemærk, at forskellen mellem den samlede hukommelsesforbrug (jeg er ikke helt sikker på, hvad figur TaskManager viser; Windows-værktøjer har en dårlig historie om at bruge forskellige udtryk for ensartede begreber) og '#Total reserved bytes' kan også bruges af CLR , bare ikke ved den administrerede bunke (så native tildelinger af CLR, indlæste DLL'er osv. kan også medregnes her).


Du ønsker måske at checke Sysinternals VMMap for at få mere detaljerede oplysninger. [1]