我有一个相当简单的问题,我无法回答自己的问题...... Google和StackOverflow也没有提供任何结果:(。
我希望我的BitmapImage的DecodePixelHeight取决于设备的RAM量。如果设备有512 MB,则DecodePixelHeight应低于1GB和2GB。我之所以这样做,是因为我在解决记忆问题上挣扎。
如何在Windows Phone 8.1(通用应用程序)上识别512 MB的低端设备?
亲切的问候, 尼尔斯
答案 0 :(得分:7)
MS没有提供确切的方法来查找设备RAM的数量,但我自己找到了解决方案。我告诉你我根据设备RAM编写应用程序代码的做法。
private void deviceMemory()
{
var memoryLimit = Windows.System.MemoryManager.AppMemoryUsageLimit;
memoryLimit = (memoryLimit / 1024) / 1024;
Debug.WriteLine("Device Memory Limit: "+memoryLimit+"MB");
}
这不是你所期待的,但拥有一些东西总比没有好。找到设备内存限制后,我可以轻松地相应地编写应用程序代码。
答案 1 :(得分:2)
以下摘自this page
在开发应用时,您可以使用
ApplicationCurrentMemoryUsage
和ApplicationPeakMemoryUsage
属性来监控内存使用情况,以及 { {1}} 和DeviceTotalMemory
属性可确定设备和应用内存限制。没有必要以极小的间隔检查应用程序的内存使用情况。偶尔检查峰值内存使用情况就足够了。如果您发现峰值内存使用量值超过允许的阈值(如Windows Phone技术认证要求的第5.2节中所述),您可以选择更精细地监视内存使用情况,以帮助诊断问题。
具体来说,DeviceTotalMemory
属性应该允许您根据设备的RAM有条件地执行某些任务。
ApplicationMemoryUsageLimit
考虑其目的可能更合适,但请注意它返回的值永远不会是512MB或1GB,但在512MB设备上,它将多低于1GB设备,您可以将其用于此目的。
MSDN上DeviceStatus的文档也可以提供有关此主题的更多信息。
ApplicationMemoryUsageLimit
答案 2 :(得分:0)
在MSDN上查看这篇文章
Developing apps for lower-memory phones for Windows Phone 8
其中一个主题与应用程序内存限制(由操作系统分配)有关。我认为这是你应该更担心的价值,不一定是设备的物理内存。
检查设备的应用内存限制
使用Windows Phone SDK 8.0或Windows Phone SDK 7.1.1更新,您可以 检查托管您应用的设备的内存工作集限制 然后,如果您知道它们不是,您可以禁用应用程序的某些功能 支持或内存密集型。检查内存工作集 限制,您调用GetValue(String)方法并传递 ApplicationWorkingSetLimit用于propertyName参数。该 以下代码显示了如何执行此操作。 C#
// Place call in a try block in case the user
// is not running a version of the Windows Phone OS
// that supports this method call.
try
{
long result =
(long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
}
catch (ArgumentOutOfRangeException)
{
// The device does not support querying for this value. This occurs
// on Windows Phone OS 7.1 and older phones without OS updates.
}
有一个表格显示内存限制应该如何与设备的物理内存相关。
另外,请看一下这篇文章:App memory limits for Windows Phone 8