Уведомления о нехватке памяти в Windows CE - PullRequest
1 голос
/ 26 марта 2012

Есть ли способ получать уведомления, когда объем доступной памяти падает ниже определенного предела (настраивается пользователем)?Я посмотрел на событие WM_HIBERNATE, но кажется, что предел для этого события не настраивается пользователем и жестко запрограммирован (160 КБ ??).Единственный способ, о котором я могу подумать, - это периодически опрашивать ОС (каждые 5 секунд ??) на наличие доступной памяти через API GlobalMemoryStats (), и если доступная память опускается ниже настроенного пользователем предела, вызывать событие для пользователя.Есть ли лучший способ?

Это уведомление должно работать на устройствах, начиная с Windows CE 5.0 и Windows Mobile 6.5

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Если это ваше приложение, которое может истощать память, вы можете реализовать некоторый код для перехвата таких ситуаций с нехваткой памяти, прежде чем система это сделает.Некоторые подсказки:

  • переопределяет вашу новую, malloc или любую другую функцию, которая выделяет память, и каждый раз проверяет, истощит ли выделение вашу память.

  • если вы боитесь, что вы замедлите свое приложение (и вам следует :)), то используйте какой-нибудь менеджер памяти, например Dougs Lee malloc.c, вы можете изменить его так, чтобы каждый раз, когда он захватывал другой блок размером 64 КБ из системной памяти, вы проверяли, работает ли система.памяти не слишком мало

  • вы можете прочитать из реестра, каковы низкие уровни памяти, вы найдете эти записи в: HKLM \ System \ Hibernate для WCE и HKLM \ System \ OOM дляWM.

http://msdn.microsoft.com/en-us/library/ms911907.aspx

2 голосов
/ 26 марта 2012

Ничто не присуще ОС, которая скажет вам, что объем памяти ниже произвольного уровня, нет.Либо опрос в вашем приложении, либо создание службы / драйвера, который сделает это за вас, вероятно, лучший способ.Что лучше, будет зависеть от того, нужно ли знать об уведомлении только одному процессу.

...