Hallo.
Есть проблема.
Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
Здравствуйте begger, Вы писали:
B>Hallo. B>Есть проблема. B>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
VirtualLock для NT. GlobalLock для 9x/NT.
Re[2]: Как заставить держать систему буфер в памяти
Здравствуйте Кривенко Антон Владимирович, Вы писали:
B>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
КАВ>VirtualLock для NT. GlobalLock для 9x/NT.
Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Как заставить держать систему буфер в памяти
Здравствуйте IT, Вы писали:
B>>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
КАВ>>VirtualLock для NT. GlobalLock для 9x/NT.
IT>Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.
VirtualLock.
Ни GlobalLock, ни PAGE_NOCACHE не имеют никакого отношения к страничному обмену.
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте IT, Вы писали:
B>>>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
КАВ>>>VirtualLock для NT. GlobalLock для 9x/NT.
IT>>Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.
AF>VirtualLock.
AF>Ни GlobalLock, ни PAGE_NOCACHE не имеют никакого отношения к страничному обмену.
по причине лихорадочного вспоминания локов под 9x. Так что в 9x как память залочить (не в драйвере)?
Здравствуйте Кривенко Антон Владимирович, Вы писали:
КАВ>по причине лихорадочного вспоминания локов под 9x. Так что в 9x как память залочить (не в драйвере)?
Ничего. Впрочем, и в NT VirtualLock не гарантирует, что страницы не будут выгружаться на диск.
Так что реально зафиксировать страницы в памяти можно только в драйвере. Если изначальная задача связана с работой с каким-то устройством (что очень похоже), то лучше переместить критичный код в драйвер.