Пишу программу. Программа через файл-мэп отображает в память выбранный файл, в новом треде обрабатывает данные и уничтожает мэп. Я заметил что после обработки файла моя прога занимает в памяти ~7,5 метров. Если её свернуть, то цифра падает до ~300 кб, а если теперь развернуть то занимает ~1.2мб. Почему так?? Зы.В программе часто резервируются временные буферы через LocalLock, по 0х20-0х100 байт.
в связи с чем у меня глупый вопрос - как узнать, какая часть выделенной процессу мемори находится в данный момент в оперативке?
Код (Text): PROCESS_MEMORY_COUNTERS_EX pmc; HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) ) printf( "\tWorkingSetSize: 0x%08X (%d)\n", pmc.WorkingSetSize, pmc.WorkingSetSize );
Я приводил данные взятые из Process Explorer'a. Может я не корректно поставил вопрос?! Меня интересует не почему в свернутном состоянии прога занимает 300кб, а почему до сворачивания 7мб, а после разворачивания 1.2мб, хотя при этом ничего не меняется, не загружается и т.д. Забыть закрыть за собой хэндлы я не мог , за этом я тщательно слежу. И небольшой оффтопный вопрос: Зачем при наведении курсора на файл, в опендиалоге, подгружается библиотека \Acrobat 7.0\ActiveX\PDFshell.dll? A после показа тултипа выгружается?
так, замечательно, значит Working Set - это как раз оперативка.. а общий объем выделенной памяти? QuotaPagedPoolUsage+QuotaNonPagedPoolUsage ? и как отличить, сколько там "prived" и "shared"?
где это там видно, сколько "прога занимает"? Virtual Size? он наоборот увеличивается (кстати, all, что такое "Virtual Size" в Process Explorer'е?) если же смотреть на performance, то можно увидеть, что уменьшается только Working Set - похоже, выгружается в своп. Pivate Bytes остаются без изменений потому что ты наводишь курсор на файл pdf. Зачем выгружается, правда, непонятно.. проще было бы оставить в памяти, по-моему
Во первых не на пдф, а вообще на любой файл. Во вторых я гляжу не в виртуал а в физикал мемори. А в третьих я нашел виновника, это как раз опендиалог так увеличивает память!
Тут без бутылки не разобраться %) О чем Русинович и Солом и пишут в главе 7. Там же эти структуры (описывающие приват и шаред пейджс) на уровне менеджера памяти ведуться (ну или где-то там, как я понимаю .
когда ты ее сворачиваешь, память сбрасывается на диск. при разворачивании подгружается на вся выгруженная память, а только необходимое. Остальное винда загрузит потом по надобности
новый способ оптимизации памяти: CreateWindow ShowWindow(... SW_MINIMIZE DestroyWindow это все как альтернатива SetProcessWorkingSetSize