首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Phone 7内存管理

Windows Phone 7内存管理
EN

Stack Overflow用户
提问于 2011-12-15 19:10:29
回答 1查看 2.2K关注 0票数 1

我想知道是否有任何具体的策略来处理内存,特别是关于Windows Phone上的图像缓存。我有一个非常图形密集型的silverlight应用程序,它需要保持它的图形,它从互联网上检索,它需要能够自由漫游-但内存要求变得相当巨大的几分钟后使用的应用程序。

我已经尝试将图像的UriSource设置为空,但是当我返回页面时,我需要保持图像背景。我不知所措,因为互联网上的信息不多。内置的分析向我展示了“纹理内存占主导地位”,并要求我分析堆内存来解决这个问题,但我仍然对此一无所知。

有什么前进的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-15 21:15:02

我的答案是一般的--类似于你的问题。我假设您肯定知道问题出在图像上。(因为一个包含几百个文本项的简单ListBox可能要花费您很多MB。)

如果你在网上搜索,你会找到大量的链接,比如this one。但是一般的分析很容易做。

取一张WP7屏幕大小的图像,即480x800。32位位图(我想这是WP7在打开图像时使用的位图)大约需要1.5MB(一个简单的乘法)。

相同的jpg文件的大小可以小10倍(用于高质量压缩),甚至更小。

现在,当您使用构造时,在幕后执行了什么操作

代码语言:javascript
复制
<image source="http://..."/>.

(在您没有提供任何信息的情况下,我想这就是您所使用的。)

WP7下载图像并将其添加到缓存中。缓存显然会跟踪指向图像的Uri的使用。

接下来打开图像,即转换为本机图像大小的位图。如果图像超过最大值,则在此过程中对图像进行下采样。WP7纹理大小。

您可以按照here的说明自定义位图大小。如果你关心质量,那么你应该使用缩小因子2、4或8。对于jpeg来说,这些因子代表了迄今为止最快的选择。(在图像加载到image控件之前,我不知道您是否知道图像的分辨率。从jpg文件中获取这些信息并不太难,但现在我不知道如何在WP7上轻松实现。)

如果(我的猜测)如果控件的源代码设置为null,则位图将被释放。当Uri设置为空时,将从缓存中清除下载的映像。(这在网上被报道了很多次。)

如果你获取了所有这些信息,就应该可以(某种程度上)控制你对图像缓存的使用。您可以粗略地估计图像大小,并决定哪些图像保留在缓存中。也许它需要一些技巧,比如将Uri对象存储在您自己的结构中,并根据需要释放它们。我并不是说这很容易做到,但它肯定是可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8519133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档