некоторое время назад я написал отличный (и, возможно, несколько уродливый) пакетный файл, который делает это, он требует sed и cut gnuwin32.
Я написал это, потому что я был в ужасе, сколько оперативной памяти современные браузеры занимают, и я хотел видеть быстро.
в настоящее время я пытаюсь его съесть, но это так, как есть.
Итак, он говорит, что Chrome использует 3.4 GB
C:\>ramchrome<ENTER>
>=1GB
3GB
3,480,288
3.4GB (rounded down)
3480288KB
вот пакетный файл. В свое время это было намного проще. Но я хотел добавить, например, GB и КБ .. и это занимает большую часть пакетного файла. Это очень перспективное доказательство, потому что даже если Chrome занял кучу yottabytes (yottabyte-миллион триллионов мегабайт), тогда мой пакет должен или, по крайней мере, написан, чтобы поддержать это.
основа работы внутренних компонентов пакетного файла проста.. Он создает некоторые временные файлы.. которое вы можете посмотреть.. Вы видите, что он в основном выводит список всех процессов, отфильтровывает их для chrome.exe хватает только часть, которая указывает, сколько байтов он использует. Тогда последний файл Temp можно вывести вы видите это просто список всех байтов, используемых каждой кром.процесс exe, с удалением запятых или пробелов, а затем оператор for суммирует их все. Последний временный файл можно открыть в excel.. хотя в этом нет необходимости.
вы увидите, как использовать bat файл, просто запустите его и посмотреть, что он выводит. Вам не нужно знать, как это работает, но это то, как это работает. Вы видите, глядя на временные файлы это генерирует.
@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=
обобщить, как это работает, вот пример первый темп asdf1 файл.как вы можете видеть в нем перечислены многие процессы не только хром.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
второй временный файл становится ближе к тому, что мы хотим, путем фильтрации 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.а еще ближе еще
64,784 K
155,376 K
106,932 K
88,464 K
asdf4.xml (не спрашивайте, почему .xls возможно я намеревался открыть его в excel)
64796
155592
114084
88464
так тогда вы пакетный файл сгенерировал простой список для суммирования.
и очевидно, что эта строка пакетного файла суммирует
for /f %%f in (%tempfile4%) do @(set /a total+=%%f)>nul
Примечание использовать пакетный файл для записи было глупо.. Пакетные файлы часто не очень переносимы, потому что небольшое изменение в выводе команды с новой версией ОС или новой версией команды может заставить программу не работать. И если оно полагается на программах третья лица, то где различные версии их там после этого оно не хороший. И многие команды gnuwin32 устарели, cygwin имеет тенденцию быть более в курсе своих версий команд. Это работает нормально для меня, хотя теперь я попытался это дало ошибку.
в какой-то момент я мог бы написать что-то в C#.
Также обратите внимание, что, как отметил Рик, это не учитывает библиотеки DLL, используемые программой. Хотя лично я считаю, что мне полезно знать, сколько используется исполняемым файлом (или в случае некоторых современных браузеры, множество экземпляров исполняемого файла!)