2

Я разрабатываю приложение, связанное с вводом / выводом, и пытаюсь отследить ошибку, возникающую при чтении с медленно движущихся дисков. Проблема с отслеживанием этого Heisenbug заключается в том, что что-то - диск или сама Windows, где-то кэширует чтение в оперативной памяти (либо во встроенном кеше дисков, либо где-то в ОС).

Чтобы увидеть ошибку в моем программном обеспечении, мне нужно перезагрузить систему (при работе на виртуальной машине возникает та же проблема с производительностью - я один раз считываю данные, и они где-то кешируются).

Есть ли способ очистить любой из этих кешей (будь то в ОС или на самом диске)?

2 ответа2

1

Вы можете очистить Windows StandbyList/Cache , вызвав вызов Windows API NtSetSystemInformation.

На stackoverflow кто-то опубликовал другой хак для очистки системного кэша, возможно, это то, что вам нужно.

0

Вы используете Win32 IO звонки? Если да, то используйте опцию FILE_FLAG_NOBUFFERING на вашем CreateFile вызова. Тогда все ReadFile и WriteFile будут направлены непосредственно на оборудование, без буферизации или кэширования в ОС. Ограничение: Ваши вызовы чтения и записи через этот дескриптор файла должны быть кратны размеру блока, а смещение в файле также должно быть кратно размеру блока.

Это (афаик) не остановит кеширование на жестком диске.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .