Я получаю большое количество данных по фиксированной ставке. Мне нужно сделать некоторую обработку этих данных в другом потоке, но это может работать медленнее, чем данные поступают, поэтому мне нужно буферизовать данные. Из-за количества данных, поступающих в доступную ОЗУ, будет быстро исчерпано, поэтому он должен переполняться на жесткий диск. То, что я могу сделать, - это что-то вроде файла с поддержкой файловой системы, поэтому писатель может быть заблокирован файловой системой, но не слишком медленным.Буферизация на жесткий диск
Вот приблизительный набор требований:
- Запись не должна быть заблокирована читателем работает слишком медленно.
- Если данные считаются достаточно медленными, чтобы освобожденная ОЗУ была исчерпана, она должна переполняться в файловую систему. Это нормально для записи на диск для блокировки.
- Чтение должно блокироваться, если данные отсутствуют, если поток не был закрыт писателем.
- Если читатель может идти в ногу с данными, он никогда не должен попадать на жесткий диск, поскольку буфер ОЗУ будет достаточным (приятным, но не существенным).
- Место на диске должно быть восстановлено по мере того, как данные будут потребляться (или вскоре после этого).
Существует ли такой механизм в Windows?
Попробуйте написать свою программу без буферизации hd и посмотреть, хорошо ли она работает с диспетчером памяти Windows. –
С количеством данных, которые мы получаем, мы просто слишком быстро закончим пространство, чтобы это сработало. У нас также закончится адресное пространство, так как мы застряли на 32-битной машине. – spencercw
Попробуйте сопоставить файлы Windows. Его довольно хорошо справляется с обменом данными с ram на hdd, здесь находится сайт msdn: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366556%28v=vs.85%29.aspx – Flocke