我正在为WP7开发应用程序(用于
Windows Phone RTM和WP模拟器的VS2010 Express),但现在我面临与内存使用相关的大问题.
应用程序本身有12个视图,其中一些可以重复使用不同的数据.这是一个新闻阅读器,因此视图主要是列表框(图像缩略图,堆栈面板和文本块).
第一个视图有一个包含30个项目的列表框.这需要大约20MB的RAM,但是当我在视图之间导航时,当前和峰值RAM使用率开始上升.好吧,峰值使用量大约为55MB,我认为没问题,但该应用程序有一个画廊部分,在选择缩略图后,它导航到另一个视图,显示下载的图像(JPEG,1131px×1647px,~486KB)但最初适合屏幕.直到这里一切都很好,但为了缩放目的我正在使用Laurent Bugnion’s Multitouch Behavior,问题是当我放大图像时,内存使用量接近90MB(就像我上次测试的最大比例尺为2.5时的87MB).
此外,在我导航视图后,当前的ram使用率可能会永久达到并保持在35MB,我相信这是由于设备缓存了一些东西.
所以,正如标题所说,我怎样才能避免这种巨大的ram使用?
编辑 – –
此外,我想问一下,在我的应用程序中,是否可以从任何视图导航到几乎所有其他视图,并且在它之间始终存在页面过渡动画(如beta工具中的电话列表应用程序模板)可能导致过多的内存使用.
最佳答案 一般来说,您希望保持图像尽可能小(尺寸和颜色深度,不一定是文件大小).为了显示图像,设备必须将其解压缩为实际的位图,因此在这种情况下,您正在查看1131×1647像素的图像,比方说16bpp,意味着图像的内存占用量为3.7MB,而不是486k文件大小.
根据您的缩放/旋转,可能有第二个复制缓冲区,因此您可以有效地加倍.这个速度不需要很长时间才能达到90MB.我当然会尝试下载较小的图像文件或尝试在本地调整大小,然后使用调整大小的图像.