Выходишь из приложения - освобождаешь ресурсы?

Тема в разделе "WASM.BEGINNERS", создана пользователем hapr, 28 апр 2018.

  1. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    59
    У меня лимит в 10 000.
    В диспетчере задач показано почти 10 000 чуть меньше так, что все логично.



    Правда от начальной темы потихоньку отходим.
    Может опрос создать по на тему освобождения ресурсов.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    > Первая объекты в где четко указано при завершении приложения удали, например: hmenu т.д.
    > Вторая объекты где четко указано при выходе из приложения они Windows их сама удалит например: hevent, hmenu - связанное с окном и т.д
    > И третья есть объекты где не указано ни одно из двух "при завершении приложения удалите объект "

    1. Обьекты, связи(и соотвественно ресурсы) полностью не чистятся системой.
    2. Ось освобождает контейнер" обьектов и всю цепочку ресурсов. Но не все данные удаляются.
    3. В предыдущих двух случаях обьекты локальны. Данный вариант касается глобальных/расшаренных обьектов и механизмов, удаление его компоненты из процесса не приводит к освобождению глобальных ресурсов. Если предыдущие два варинта не существенны - утечка памяти на обьекты очень мала, то данный вариант - потенциальная угроза системе. Глобальные обьекты это не только драйвера, но и механизмы гуй, вот те же ваши хуки например.
     
    hapr нравится это.
  3. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    59
    Что то я совсем запутался.

    А как же hEvent - это ведь глобальный объект, да же не локальный.
    А в MSDN написано:
    Разве то что написано было выше не входит в конфликт с тем что в MSDN написано или я не так понял?
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    Самый простой пример - в нт есть мониторы, которые хранят инфу после уничтожения обьекта.

    мсдн не фундаментальный док. Там лишь рекомендации для юзер и тех кто входит в кернел коденг. Общее описание и нюансы. Там хорошо смотреть прототипы апи и их описание, но не системную их работу и прочие интерналс детали.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    > А как же hEvent - это ведь глобальный объект, да же не локальный.

    Нет, это локальный обьект в конвеере(процессе). При закрытии его описателя(при пограничном декременте числа ссылок на обьект) он уничтожается. Глобальный он именован в системе нт имён. Но и такие обьекты могут оставаться живыми не зависимо от завершения родителя и всех ссылок на него.
     
  6. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    59

    Понятно, спасибо за разъяснения.

    И еще тогда одно последнее уточнение :
    А что тогда с объектами связанными друг с другом, например: Основное окно и дочерние ему окна, привязанное к основному окну меню, привязанный к окну значок, курсор и другие случаи...
    По MSDN они должны удаляться полностью при удалении объекта к которому привязаны.
    А на самом деле как?
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    Гуй слишком сложен, единственная возможность в вашем вопросе разобраться - снять статистику по памяти и посмотреть сколько её утекает и при каких событиях. Но это в целом особо ничего не покажет, память текёт. Но есть есчо вопрос профайла по памяти. Если вы что то сами не освободили, то система это делает принудительно, асинхронно и медленно. И соответственно последствия для всей системы - тормоза. Ваш вопрос нельзя рассмотреть изолированно от ос, он затрагивает её полностью.
     
  8. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    59
    Оставим тогда для лучших времен.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    Думаю да, до практики вам далеко.
     
  10. hapr

    hapr Member

    Публикаций:
    0
    Регистрация:
    9 мар 2009
    Сообщения:
    59
    Случайно наткнулся в MSDN, с всего выше написанного получается, что по MSDN не копаясь в недрах оси, при завершении работы приложения, можно никакие ресурсы не освобождать, ось все сама сделает - во как.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    hapr,

    Поищите в мсдн сервис NtMakePermanentObject или высокоуровневую апи, которая использует этот импорт - врядле вы это там найдёте.

    А есчо IPC ко всему прочему синхронная может быть - при аварийном сбросе протокола ляжет/зависнит и клиент :)

    Как вы до сих пор не поймёте что нельзя тупо системой завершать всю активность, это аварийная ситуация. Да, это сработает для простых апп, которые особых фич не имеют, можно сколь угодно долго килять блокнот и врядле будут проблемы. Но к примеру для браузера аварийный сброс может привести к глюку всей ос. А по мимо этого может быть не возможен перезапуск апп - так как его базы данных повредятся.