Qualche tempo fa ho scritto un ottimo file batch (e forse un po 'brutto) che lo fa, richiede la sed e cut di gnuwin32.
L'ho scritto perché ero inorridito dalla quantità di RAM utilizzata dai moderni browser e volevo vedere rapidamente.
Attualmente sto cercando di ridimensionarlo, ma è così com'è.
Quindi, sta dicendo che Chrome utilizza 3,4 GB
C:\>ramchrome<ENTER>
>=1GB
3GB
3,480,288
3.4GB (rounded down)
3480288KB
Ecco il file batch. Un tempo era molto più semplice. Ma volevo aggiungere ad esempio GB e KB .. e questo occupa gran parte del file batch. È una prova molto futura perché anche se Chrome occupasse un mucchio di yottabyte (una yottabyte è di milioni di miliardi di miliardi di megabyte), il mio batch dovrebbe o almeno è scritto per supportarlo.
La base di come funzionano gli interni del file batch è semplice .. Crea alcuni file temporanei .. che puoi guardare .. Vedi che fondamentalmente genera un elenco di tutti i processi, filtra quelli per chrome.exe grabs solo la parte che indica quanti byte utilizza. Quindi l'ultimo file temporaneo che è possibile visualizzare si vede che ha solo un elenco di tutti i byte utilizzati da ciascun processo chrome.exe, con eventuali virgole o spazi rimossi, quindi un'istruzione for li somma tutti. L'ultimo file temporaneo potrebbe essere aperto in Excel ... anche se non è necessario.
Vedi come usare il file bat, basta eseguirlo e vedere cosa genera. Non è necessario sapere come funziona, ma è così che funziona. Vedi guardando i file temporanei che genera.
@echo off
setlocal enableextensions enabledelayedexpansion
set tempfile1=%temp%\asdf1.a
set tempfile2=%temp%\asdf2.a
set tempfile3=%temp%\asdf3.a
set tempfile4=%temp%\asdf4.xls
tasklist >%tempfile1%
type %tempfile1% | grep "chrome" > %tempfile2%
cut -b 68- %tempfile2% > %tempfile3%
sed -r "s/\d32|K|,//g" %tempfile3% >%tempfile4%
set total=0
for /f %%f in (%tempfile4%) do @(set /a total+=%%f)>nul
:: --- added this
set a=%total%
if "%a:~-9,-6%"=="" echo ^< 1GB
if NOT "%a:~-13,-6%"=="" echo ^>=1GB
set yotta=%a:~-24,-21%
set zetta=%a:~-21,-18%
set exa=%a:~-18,-15%
set peta=%a:~-15,-12%
set tera=%a:~-12,-9%
set giga=%a:~-9,-6%
set mega=%a:~-6,-3%
set kilo=%a:~-3%
set prefix=
if NOT "!yotta!"=="" (
set yotta=!yotta!,
if "!prefix!"=="" (
set prefix=YB
echo !a:~-24,-21!!prefix!
)
)
if NOT "!zetta!"=="" (
set zetta=!zetta!,
if "!prefix!"=="" (
set prefix=ZB
echo !a:~-21,-18!!prefix!
)
)
if NOT "!exa!"=="" (
set exa=!exa!,
if "!prefix!"=="" (
set prefix=EB
echo !a:~-18,-15!!prefix!
)
)
if NOT "!peta!"=="" (
set peta=!peta!,
if "!prefix!"=="" (
set prefix=PB
echo !a:~-15,-12!!prefix!
)
)
if NOT "!tera!"=="" (
set tera=!tera!,
if "!prefix!"=="" (
set prefix=TB
echo !a:~-12,-9!!prefix!
)
)
if NOT "!giga!"=="" (
set giga=!giga!,
if "!prefix!"=="" (
set prefix=GB
echo !a:~-9,-6!!prefix!
)
)
if NOT "!mega!"=="" (
set mega=!mega!,
if "!prefix!"=="" (
set prefix=MB
echo !a:~-6,-3!!prefix!
)
)
if "!mega!"=="" (
if "!prefix!"=="" (
set prefix=KB
echo !kilo!
)
)
echo !yotta!!zetta!!exa!!peta!!tera!!giga!!mega!!kilo!
if "%prefix%"=="YB" echo !a:~-24,-21!.!a:~-21!YB (rounded down)
if "%prefix%"=="TB" echo !a:~-12,-9!.!a:~-9,1!TB (rounded down)
if "%prefix%"=="GB" echo !a:~-9,-6!.!a:~-6,1!GB (rounded down)
if "%prefix%"=="MB" echo !a:~-6,-3!.!a:~-3,1!MB (rounded down)
:: echo %a:~-13,-6%,%a:~-6,-3%,%a:~-3%
set a=
:: -----------
echo %total%KB
set tempfile1=
set tempfile2=
set tempfile3=
set tempfile4=
Per riassumere come funziona, ecco un esempio del primo file temporaneo asdf1.a come puoi vedere che elenca molti processi non solo chrome.exe
chrome.exe 5572 Console 1 64,784 K
chrome.exe 3880 Console 1 155,376 K
chrome.exe 14516 Console 1 106,932 K
chrome.exe 2524 Console 1 88,464 K
dllhost.exe 15996 Console 1 8,844 K
tasklist.exe 16232 Console 1 7,152 K
Il secondo file temporaneo si avvicina a ciò che vogliamo, filtrando chrome.exe
asdf2.a
chrome.exe 5572 Console 1 64,784 K
chrome.exe 3880 Console 1 155,376 K
chrome.exe 14516 Console 1 106,932 K
chrome.exe 2524 Console 1 88,464 K
asdf3.a si avvicina ancora
64,784 K
155,376 K
106,932 K
88,464 K
asdf4.xml (non chiedere perché sono .xls, forse intendevo aprirlo in Excel)
64796
155592
114084
88464
Quindi il file batch ha generato un semplice elenco da sommare.
e ovviamente questa riga del file batch fa la somma
for /f %%f in (%tempfile4%) do @(set /a total+=%%f)>nul
Nota L' uso di un file batch per scrivere questo è stato sciocco. I file batch spesso non sono molto portabili perché una leggera modifica nell'output di un comando con una nuova versione del sistema operativo o una nuova versione di un comando, può far sì che il programma non funzioni . E se si basa su programmi di terze parti in cui sono disponibili diverse versioni, non va bene. E molti dei comandi di gnuwin32 sono obsoleti, cygwin tende ad essere più aggiornato con le sue versioni dei comandi. Questo andava bene per me, anche se ora l'ho provato ha dato un errore.
Potrei scrivere qualcosa in C # invece ad un certo punto.
Si noti inoltre che, come sottolineato da Rick, questo non tiene conto delle DLL utilizzate da un programma. Anche se personalmente trovo che ciò che mi sia utile è sapere quanto viene usato dall'eseguibile (o nel caso di alcuni browser moderni, i molti esempi dell'eseguibile!)