Катастрофическое уменьшение свободной памяти
От: Thrush  
Дата: 03.07.03 11:41
Оценка:
Пытаюсь прочитать большой файл (порядка 700 Мб), для чего выделяю память вызовом функции:
VirtualAlloc(NULL, dwViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

где
dwViewSize = 0x1000000; // 16 Мб

затем в цикле читаю с помощью ReadFile. Все было бы хорошо, если бы не катастрофическое уменьшение свободной памяти после каждого ReadFile. Это безобразие творится, конечно же, под Windows 98. Вопрос: можно как-нибудь предотвратить сабж?
Код прилагается:
HANDLE hand = CreateFile(aFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
LPVOID pAddress = VirtualAlloc(NULL, dwViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
DWORD dwRead;
while(ReadFile(hand, pAddress, dwViewSize, &dwRead, NULL))
{
    // здесь обрабатывю данные ...
}
VirtualFree(pAddress, NULL, MEM_RELEASE);
// ...
Re: Катастрофическое уменьшение свободной памяти
От: small_cat Россия  
Дата: 03.07.03 12:42
Оценка:
Здравствуйте, Thrush, Вы писали:

Не знаю, насколько поможет, но попробуй FILE_FLAG_NO_BUFFERING в CreateFile. Эта штука не дает кэшировать файл. Может, память за счет кэша уходит?
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re: Катастрофическое уменьшение свободной памяти
От: Sergeem Израиль  
Дата: 03.07.03 14:13
Оценка:
Здравствуйте, Thrush, Вы писали:

T>Пытаюсь прочитать большой файл (порядка 700 Мб), для чего выделяю память вызовом функции:


<snip>

T>
T>HANDLE hand = CreateFile(aFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
T>LPVOID pAddress = VirtualAlloc(NULL, dwViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
T>DWORD dwRead;
T>while(ReadFile(hand, pAddress, dwViewSize, &dwRead, NULL))
T>{
T>    // здесь обрабатывю данные ...
T>}
T>VirtualFree(pAddress, NULL, MEM_RELEASE);
T>// ...
T>


Покажи, что ты делаешь внутри while. Вполне возможно, что утечка там.
Serge.

Hасколько проще была бы жизнь, если бы она была в исходниках.
Re[2]: Катастрофическое уменьшение свободной памяти
От: Thrush  
Дата: 04.07.03 05:35
Оценка:
Здравствуйте, small_cat, Вы писали:

_>Не знаю, насколько поможет, но попробуй FILE_FLAG_NO_BUFFERING в CreateFile. Эта штука не дает кэшировать файл. Может, память за счет кэша уходит?


Спасибо, FILE_FLAG_NO_BUFFERING помог. Что интересно, в Win2K и без этого флага все ОК.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.