Performance WindowsPhone7内存管理

Performance WindowsPhone7内存管理,performance,image,windows-phone-7,memory,Performance,Image,Windows Phone 7,Memory,我想知道是否有处理内存的具体策略,特别是在Windows Phone上的图像缓存方面。我有一个非常图形密集的silverlight应用程序,它需要保留从互联网检索到的图形,并且它需要能够自由漫游——但使用该应用程序几分钟后,内存需求变得相当巨大 我已经尝试将图像的UriSource设置为null,但是当我返回页面时,我需要维护图像背景。我不知所措,因为网上没有多少信息。内置评测向我展示了“纹理内存占主导地位”,并要求我分析堆内存以解决问题,但我对这些仍然一无所知 有什么前进的方向吗?我的回答将是

我想知道是否有处理内存的具体策略,特别是在Windows Phone上的图像缓存方面。我有一个非常图形密集的silverlight应用程序,它需要保留从互联网检索到的图形,并且它需要能够自由漫游——但使用该应用程序几分钟后,内存需求变得相当巨大

我已经尝试将图像的UriSource设置为null,但是当我返回页面时,我需要维护图像背景。我不知所措,因为网上没有多少信息。内置评测向我展示了“纹理内存占主导地位”,并要求我分析堆内存以解决问题,但我对这些仍然一无所知


有什么前进的方向吗?

我的回答将是一般性的——与你的问题类似。我想你肯定知道问题出在图像上。(因为一个包含几百个文本项的简单列表框可能会花费很多MB。)

如果你在网上搜索,你会发现很多链接,比如。但一般分析很容易做到

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

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

现在,当你使用构造时,在幕后做了什么

<image source="http://..."/>.
(在您没有任何信息的情况下,我想您使用的就是这个。)

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

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

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

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


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

我的回答将是一般性的——与你的问题类似。我想你肯定知道问题出在图像上。(因为一个包含几百个文本项的简单列表框可能会花费很多MB。)

如果你在网上搜索,你会发现很多链接,比如。但一般分析很容易做到

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

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

现在,当你使用构造时,在幕后做了什么

<image source="http://..."/>.
(在您没有任何信息的情况下,我想您使用的就是这个。)

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

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

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

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


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

它在应用程序中无处不在,没有任何特别之处。我只是想知道是否有人有一个策略来处理完全任意问题的高内存使用率?我的解决方案通常是修复代码中的该死的问题。这就是我想要找到的。因为这是一个模型设计问题,而不是代码问题。它在应用程序中无处不在,没有任何特别之处。我只是想知道是否有人有一个策略来处理完全任意问题的高内存使用率?我的解决方案通常是修复代码中的该死的问题。这就是我想要找到的。因为这是一个模型设计问题,而不是代码问题。有点道理,我只是把它放在那里,看看是否有一个我不知道的一般策略。谢谢。如果我清除了页面移动之间的图像,我将如何在按下Back键时重新加载它们?图像控制将重新加载它们。如果我清空URI源,当你在页面之间导航时,它们不会回来。我还注意到,如果你将应用程序墓碑化,内存占用将减少一半。一定是b