我一直在WP7的应用程序,它的形象画廊的应用程序,基本变焦和快速滑动手势的实现。
为了测试我编译离线图像应用程序(其文件名的编号)设置为内容,并通过硬编码字符串(稍后将代替)访问它们。
但感悟到应用占用了大量的内存。 我认为这是由于图像,发现这个博客 ; 图像总是缓存。 我使用的代码从博客进行整治。 仍然不会释放内存,虽然消费率没有下降。
对于最后一次尝试,我创建与导航及图像的图像控制基本特征2个按钮的另一个测试应用程序,只是为了确保它不是我的动作代码,可能是这个问题。
这是XAML
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0" x:Name="ImageHolder" Height="Auto" Width="Auto" Stretch="Uniform" Tap="image_Tap" />
<TextBlock x:Name="MemUsage" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button x:Name="PrevButton" Content="Prev" Width="240" Click="btnPrev_Click"/>
<Button x:Name="NextButton" Content="Next" Width="240" Click="btnNext_Click"/>
</StackPanel>
</Grid>
这是cs文件
const int PAGE_COUNT = 42;
int pageNum = 0;
public MainPage()
{
InitializeComponent();
RefreshImage();
}
private void btnPrev_Click(object sender, RoutedEventArgs e)
{
pageNum = (PAGE_COUNT + pageNum - 1) % PAGE_COUNT; // cycle to prev image
RefreshImage();
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
pageNum = (PAGE_COUNT + pageNum + 1) % PAGE_COUNT; // cycle to next image
RefreshImage();
}
private void image_Tap(object sender, GestureEventArgs e)
{
RefreshTextData();
}
private void RefreshImage()
{
BitmapImage image = ImageHolder.Source as BitmapImage;
ImageHolder.Source = null;
if (image != null)
{
image.UriSource = null;
image = null;
}
ImageHolder.Source = new BitmapImage(new Uri("000\\image" + (pageNum + 1).ToString("D3") + ".jpg", UriKind.Relative));
RefreshTextData();
}
private void RefreshTextData()
{
MemUsage.Text = "Device Total Memory = " + (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory") / (1024 * 1024)
+ "\nCurrent Memory Usage = " + (long)DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage") / (1024 * 1024)
+ "\nPeak Memory Usage = " + (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage") / (1024 * 1024);
}
但还是内存泄漏是存在的,我不能针点它。 我有一个很难找到它。 存储器剖析表明,我有一个字符串的许多情况下,我无法解释。
几个要点:
- 我有图片文件夹中的“000”,并命名为“图像###”。 目前我已经从“image001”与文件名图像“image042”
- 测试应用程序,尽快拥有6 MB的内存占用,因为它显示的第一页完全与图像,并经过最前一页页改变它上升到几乎18-20 MB
- 随后的页面变化导致内存逐渐增加,然后最终崩溃,如果图像的数量允许,通过所有图片循环后否则内存消耗是恒定的
- 我使用.jpg文件与约维1280 * 2000,用于测试我不调整图像大小。