サムネイルのリストを表示する Windows phone アプリケーションを作成しています。私はそれを行うために LongListSelector を使用しています。
サムネイル リストを何度か前後に移動すると、アプリケーションでメモリ リークが発生します。アプリの使用中にメモリ使用量を確認したところ、サムネイルのあるページを開くとメモリが増加していることがわかります (予想どおり)。前のページに戻ると、メモリ使用量は減少しますが、増加するほどではありません。プロセスを数回繰り返すと、メモリ不足の例外で終了します。
2 ページのみのテスト アプリケーションを作成しました。1 つは、LongListSelector に一連の potos をロードする他に移動するためのボタンを備えています。このアプリを作成して、メモリ リークが他の原因によるものではないことを確認します。
この簡単なテストでは、メモリ使用量はアプリと同じように動作します。
サムネを含む私のページのメインコードは次のとおりです。
public class testObject
{
public string Title { get; set; }
public BitmapImage Thumbnail { get; set; }
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
photosList = new List<testObject>();
for (int i = 0; i < 200; i++)
{
BitmapImage bi = new BitmapImage(new Uri("/images/"
+ i.ToString()+".jpg",
UriKind.RelativeOrAbsolute));
photosList.Add(new testObject { Title = i.ToString(),
Thumbnail = bi });
}
GridPictures.ItemsSource = photosList;
}
protected override void OnBackKeyPress(
System.ComponentModel.CancelEventArgs e)
{
foreach (testObject test in photosList)
{
test.Thumbnail.DecodePixelHeight = 1;
test.Thumbnail.DecodePixelWidth = 1;
test.Thumbnail = null;
}
photosList.Clear();
photosList = null;
base.OnBackKeyPress(e);
}
そして、他のページのボタンのコードは次のとおりです。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.RelativeOrAbsolute));
}