のインスタンスを作成するたびにメモリ リークが発生しますWriteableBitmap
。stackoverflow や他のフォーラムで複数の提案を試みましたが、何も機能していません。私のテスト アプリの基本的なフローは次のとおりです。
- で画像を選ぶ
PhotoChooserTask
- オブジェクトから を使用して を作成
Stream
します。PhotoResult
WriteableBitmap
それでおしまい。変数を無効にして呼び出しGC.Collect()
ても、問題の一部しか解決されません。アプリがクラッシュするまでアプリがメモリを割り当てないようにしますが、オブジェクトが範囲外になっても、新しい画像を選択するまでは常にメモリが割り当てられます. デフォルトの Windows Phone Direct3D with XAML App で再現できました。デフォルト プロジェクトに対する唯一の変更点は次のとおりです。
MainPage.xaml.cs
public MainPage() {
InitializeComponent();
_photoChooserTask = new PhotoChooserTask();
_photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTaskComplete);
}
private void ApplicationBarIconButton_Click(object sender, EventArgs e) {
_photoChooserTask.Show();
}
private void photoChooserTaskComplete(object sender, PhotoResult e) {
if (e.TaskResult == TaskResult.OK) {
BitmapImage image = new BitmapImage();
image.SetSource(e.ChosenPhoto);
WriteableBitmap wbm = new WriteableBitmap(image);
image.UriSource = null;
image = null;
wbm = null;
GC.Collect();
}
}
MainPage.xaml
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" Mode="Default" Opacity="0.5" >
<shell:ApplicationBar.Buttons>
<shell:ApplicationBarIconButton IconUri="/junkUrl.png" Text="albums" Click="ApplicationBarIconButton_Click" />
</shell:ApplicationBar.Buttons>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>