7.1.1推出以后我们该对自己的程序做下小升级以应对低端手机,
对有可能报错的地方做下处理,
对可以节省内存的地方尽量采用一些可以节省内存的方法替换原来的方法。
下面列出一些小技巧仅供参考。
1.下面是判断机器内存的helper用来区分256的机型
public static class LowMemoryHelper { public static bool IsLowMemoryDevice { get; set; } static LowMemoryHelper() { try { // Int64 result = DeviceStatus.ApplicationMemoryUsageLimit; Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit"); IsLowMemoryDevice = result < 94371840L; } catch (ArgumentOutOfRangeException) { IsLowMemoryDevice = false; } } }
上面注释的部分和下一行的意思是一样的,按照微软msdn所说是推荐使用注释掉的那行,
但是它取值比GetValue的值要大,原因不清楚,
用getvalue的方式判断最大程序可用内存小于90M是256的机型(更确切的说是94371840 bytes)。
2.不支持PeriodicTask and ResourceIntensiveTask
用到这两个类的地方应该加入判断避免出现异常影响用户体验。
为什么不支持呢,看一下如果执行后台线程内存的分布情况就知道了,很接近crash!:
100MB | + | 60MB | + | 60MB | + | 15MB | ≈ | 256MB |
(Operating system) | (Foreground app) | (ResourceIntensiveTask) | (AudioStreamingAgent) |
这里可以参考 Background Agents Overview for Windows Phone;
3.使用WebBrowserTask替代<WebBrowser />控件
4.用 BingMapsTask替代 <Map />控件
5.降低图像质量
6.长列表使用数据虚拟化
7.禁用跳转页面动画
8.减少使用SoundEffect的次数
9.压缩XNA资源
10.仔细排查内存泄露
11.另外如果不想针对7.1.1进行优化又担心256的用户下载后使用出现什么问题,然后给了差评,或者直接放弃这部分用户,还有个办法,O(∩_∩)O哈哈~
在WMAppManifest.xml文件的Capabilities标记下加入Requirements标记,方法如下:
</Capabilities> <Requirements> <Requirement Name="ID_REQ_MEMORY_90" /> </Requirements>
这样在256用户的市场里就看不到你的应用了。