Некоторое время назад я написал отличный (и, возможно, несколько уродливый) пакетный файл, который делает это, он требует Sed и Cut gnuwin32.
Я написал это, потому что я был в ужасе от того, сколько оперативной памяти занимают современные браузеры, и я хотел быстро увидеть.
Я сейчас пытаюсь убрать это, но это так, как есть.
Итак, он говорит, что Chrome использует 3,4 ГБ
C:\>ramchrome<ENTER>
>=1GB
3GB
3,480,288
3.4GB (rounded down)
3480288KB
Вот командный файл. Когда-то это было намного проще. Но я хотел добавить, например, ГБ и КБ .. и это занимает большую часть командного файла. Это очень надежное решение на будущее, потому что даже если Chrome потребует кучу йоттабайт (йоттабайт - миллион триллионов мегабайт), то моя партия должна или, по крайней мере, написана для поддержки этого.
Основа того, как работает внутренний пакетный файл, проста. Он создает некоторые временные файлы .. которые вы можете посмотреть .. Вы видите, что он в основном выводит список всех процессов, отфильтровывает те, которые для chrome.exe захватывает только ту часть, которая указывает, сколько байтов он использует. Затем в последнем временном файле, который вы можете вывести, вы видите, что он содержит список всех байтов, используемых каждым процессом chrome.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.a, поскольку вы видите, что в нем перечислены многие процессы, а не только 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
Второй временный файл становится ближе к тому, что мы хотим, отфильтровывая 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 все ближе
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, используемые программой. Хотя лично я нахожу, что мне полезно знать, сколько используется исполняемым файлом (или, в случае некоторых современных браузеров, много экземпляров исполняемого файла!)