Что происходит с памятью при сворачивании программы?

Тема в разделе "WASM.BEGINNERS", создана пользователем twgt, 15 мар 2007.

  1. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Пишу программу. Программа через файл-мэп отображает в память выбранный файл, в новом треде обрабатывает данные и уничтожает мэп.
    Я заметил что после обработки файла моя прога занимает в памяти ~7,5 метров. Если её свернуть, то цифра падает до ~300 кб, а если теперь развернуть то занимает ~1.2мб.
    Почему так??

    Зы.В программе часто резервируются временные буферы через LocalLock, по 0х20-0х100 байт.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    поиск по форуму :P
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    может быть она выгружается в страничный файл?
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    в связи с чем у меня глупый вопрос - как узнать, какая часть выделенной процессу мемори находится в данный момент в оперативке?
     
  5. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Код (Text):
    1. PROCESS_MEMORY_COUNTERS_EX pmc;
    2.  
    3. HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
    4.                            PROCESS_VM_READ,
    5.                            FALSE, processID );
    6.  
    7. if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
    8.         printf( "\tWorkingSetSize: 0x%08X (%d)\n", pmc.WorkingSetSize, pmc.WorkingSetSize );
     
  6. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Почитай у Соломона и Русиновича, глава 7.
    Там много чего интересного.
     
  7. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Я приводил данные взятые из Process Explorer'a. Может я не корректно поставил вопрос?!
    Меня интересует не почему в свернутном состоянии прога занимает 300кб, а почему до сворачивания 7мб, а после разворачивания 1.2мб, хотя при этом ничего не меняется, не загружается и т.д.
    Забыть закрыть за собой хэндлы я не мог :), за этом я тщательно слежу.

    И небольшой оффтопный вопрос: Зачем при наведении курсора на файл, в опендиалоге, подгружается библиотека \Acrobat 7.0\ActiveX\PDFshell.dll? A после показа тултипа выгружается?
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    так, замечательно, значит Working Set - это как раз оперативка.. а общий объем выделенной памяти? QuotaPagedPoolUsage+QuotaNonPagedPoolUsage ?
    и как отличить, сколько там "prived" и "shared"?
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    где это там видно, сколько "прога занимает"? Virtual Size? он наоборот увеличивается
    (кстати, all, что такое "Virtual Size" в Process Explorer'е?)
    если же смотреть на performance, то можно увидеть, что уменьшается только Working Set - похоже, выгружается в своп. Pivate Bytes остаются без изменений

    потому что ты наводишь курсор на файл pdf. Зачем выгружается, правда, непонятно.. проще было бы оставить в памяти, по-моему
     
  10. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Во первых не на пдф, а вообще на любой файл. Во вторых я гляжу не в виртуал а в физикал мемори.
    А в третьих я нашел виновника, это как раз опендиалог так увеличивает память!
     
  11. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Тут без бутылки не разобраться %)
    О чем Русинович и Солом и пишут в главе 7.
    Там же эти структуры (описывающие приват и шаред пейджс) на уровне
    менеджера памяти ведуться (ну или где-то там, как я понимаю :).
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    в глаза не видел ни Руссиновича, ни Соломона ))
    тока их ProcExplorer..
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    когда ты ее сворачиваешь, память сбрасывается на диск. при разворачивании подгружается на вся выгруженная память, а только необходимое. Остальное винда загрузит потом по надобности
     
  14. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Ну так пошурши по гуглу иль в книжный загляни )
     
  15. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да ну..
     
  16. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    да, действительно , потом не сильно увеличивается,
    спасибо.
     
  17. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    новый способ оптимизации памяти:
    CreateWindow
    ShowWindow(... SW_MINIMIZE
    DestroyWindow

    это все как альтернатива SetProcessWorkingSetSize