当可用内存低于某个限制(用户可配置)时,有没有办法获得通知?我查看了 WM_HIBERNATE 事件,但似乎此事件的限制不是用户可配置的,并且是硬编码的(160KB ??)。我能想到的唯一方法是通过 GlobalMemoryStats() API 定期(每 5 秒??)轮询操作系统以获取可用内存,如果可用内存低于用户配置的限制,则向用户引发事件。有没有更好的办法?
此通知必须适用于从 Windows CE 5.0 和 Windows Mobile 6.5 开始的设备
当可用内存低于某个限制(用户可配置)时,有没有办法获得通知?我查看了 WM_HIBERNATE 事件,但似乎此事件的限制不是用户可配置的,并且是硬编码的(160KB ??)。我能想到的唯一方法是通过 GlobalMemoryStats() API 定期(每 5 秒??)轮询操作系统以获取可用内存,如果可用内存低于用户配置的限制,则向用户引发事件。有没有更好的办法?
此通知必须适用于从 Windows CE 5.0 和 Windows Mobile 6.5 开始的设备
操作系统中没有任何固有的东西会告诉您内存低于任意级别,不。在您的应用程序中进行轮询或创建为您执行此操作的服务/驱动程序是最好的方法。哪个“更好”取决于是否只有一个进程需要了解通知。
如果那是您的应用程序可以耗尽内存,那么您可以实现一些代码来在系统执行之前拦截这种低内存情况。一些提示:
覆盖您的 new、malloc 或任何其他分配内存的函数,并每次检查分配是否会耗尽您的内存。
如果你害怕你会减慢你的应用程序(你应该:))然后使用一些内存管理器,比如 Dougs Lee malloc.c,你可以修改它,所以每次它从系统内存中获取另一个 64KB 块时,你会检查系统是否内存不是太低
您可以从注册表中读取什么是低内存级别,您将在以下位置找到这些条目:WCE 的 HKLM\System\Hibernate 和 WM 的 HKLM\System\OOM。