【问题标题】:ApplicationWorkingSetLimit returns 0 in Windows Phone Silverlight 8.1ApplicationWorkingSetLimit 在 Windows Phone Silverlight 8.1 中返回 0
【发布时间】:2014-10-01 17:49:27
【问题描述】:

我有一个 Windows Phone Silverlight 8.1 应用程序,它一直在使用 ApplicationWorkingSetLimit 来检测高内存和低内存设备。但是在 8.1 上我发现这个值返回 0,而不是应用限制。

long result = (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
return result <= 188743680; // 188743680 (180mb) is the maximum a low mem device 

因为结果始终为 0,它甚至会将高端设备标记为内存不足。我已经在 8.1 模拟器和我的 Lumia 920 上尝试过,没有任何区别。我没有有效的方法来判断什么是高或低了。这是操作系统的错误吗?

【问题讨论】:

    标签: c# windows-phone-8.1


    【解决方案1】:

    您可以使用Windows.System.MemoryManagerAppMemoryUsageLimit 属性。

    var limit = Windows.System.MemoryManager.AppMemoryUsageLimit;
    // some limit comparison here
    

    以下是不同设备的内存上限:

    【讨论】:

    • 感谢记录,限制是准确的,所以 185MB 意味着 185 * 1024 * 1024 字节
    【解决方案2】:

    要尝试的两件事:

    1. 将 188743680 更改为 188743680L。这可能无关紧要,但最好确定一下。
    2. 尝试启用ID_CAP_IDENTITY_DEVICE 功能。文档说您不需要它,但可能会产生影响。

    【讨论】:

    • 我的代码和你的完全一样(除了我使用L 后缀),它可以在模拟器和设备上完美运行。你到底是在哪里打的电话?
    • 其实我的项目是针对WPS 8.0的,不是8.1的。也许这会有所作为?
    • 是的,我想这一定是原因。微软官方声明的检测低内存设备的方法似乎不适用于 windows phone silverlight 8.1
    • 是的,这就是问题所在。如果您阅读msdn.microsoft.com/en-us/library/windows/apps/… 搜索部分标题使用 Windows.System.MemoryManager 确定您的应用程序的内存使用情况,它将告诉您使用@yasen 的解决方案。
    • 很高兴听到。您能否将@yasen 的答案标记为正确以帮助他人?
    猜你喜欢
    • 2023-04-03
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多