2015-03-10 5 views
2

Я прочитал несколько сообщений here и here о том, как кеш можно очистить с помощью внешних приложений.Как очистить кэш в Windows программно?

Я бы хотел запустить тест производительности и хотел бы очистить кеш операционной системы до каждого запуска. Я запускаю программу на Java со многими параметрами, мне нужен автоматизированный способ сделать это, то есть программно в Java.

Любые предложения?

+0

Вы можете использовать ЮНА, чтобы позвонить [ ' SetSystemFileCacheSize'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa965240%28v=vs.85%29.aspx) '((SIZE_T) -1, (SIZE_T) -1, 0) ', который очищает кеш. Но я не думаю, что этого достаточно, потому что он просто переводит страницы из рабочего набора в резервный список, фактически не очищая их. – eryksun

+0

RAMMap использует недокументированный системный вызов, чтобы очистить резервный список, который, как мне кажется, требует NT 6. Для получения дополнительной информации о объявлениях, требуемых в соответствии с требованиями, обратитесь к [этой странице] (http://processhacker.sourceforge.net/doc/ntexapi_8h_source.html). следующий фрагмент: 'SYSTEM_MEMORY_LIST_COMMAND command = MemoryPurgeStandbyList;' 'NtSetSystemInformation (SystemMemoryListInformation, & command, sizeof (команда));' Для этого требуется '' SeProfileSingleProcessPrivilege'', для которого повышенный процесс должен вызывать 'OpenProcessToken',' LookupPrivilegeValue 'и' AdjustTokenPrivileges'. – eryksun

+0

Я забыл упомянуть, что вызов 'SetSystemFileCacheSize' для очистки кеша требует включения' 'SeIncreaseQuotaPrivilege''. – eryksun

ответ

1

Вы можете использовать командный файл для очистки кеша и вызова этого командного файла в java.

вот команда для вызова пакетного файла в Java: more here

Runtime.getRuntime().exec("cmd /c start clearCache.bat"); 

этот пакетный файл очистить все java cache в windows. просто вызовите этот пакетный файл в код Java для выполнения

@Echo Off 

echo ========================= 

echo Now clearing all users Java cache folder 

set "docandset=%homedrive%\users" 

    >> c:\Delete.log echo/ "Java\Deployment\cache\6.0\" 

for /f "delims=" %%a in ('dir "%docandset%" /ad /b') do (

for %%b in (

"%docandset%\%%a\AppData\LocalLow\Sun\Java\Deployment\cache\6.0" 

) do (

echo %%b >> c:\Delete.log 

cd /d %%b >> c:\Delete.log 2>&1 

rd /s /q %%b >> c:\Delete.log 2>&1 

del /f /s /q %%b >> c:\Delete.log 2>&1 

) 

) 

echo ========================= 

echo COMPLETE!!!! 

echo ========================= 

echo All users Java cache folder has been cleared. 

PAUSE 

нашел его здесь: http://community.spiceworks.com/scripts/show/1928-clear-all-users-java-cache

вы можете проверить это также, прозрачные окна временные файлы: Batch delete temporary Windows files (system, browsers, cache, etc) for all users

+0

В этом комментарии описывается, как очистить кеш Java от диска, но я считаю, что вопрос заключается в том, как очистить кеш системного файла от памяти. –