Vazamento de memória WriteableBitmap no Windows Phone 8
Estou tendo um vazamento de memória sempre que eu criar qualquer instância de umWriteableBitmap
. Eu tentei várias sugestões em stackoverflow e outros fóruns, mas nada está funcionando. O fluxo básico do meu aplicativo de teste é o seguinte:
PhotoChooserTask
Use oStream
dePhotoResult
objeto para criar umWriteableBitmap
.É isso aí. Anulando as variáveis e chamandoGC.Collect()
resolve apenas parte do problema. Ele impede que o aplicativo aloque memória até que o aplicativo trave, mas mesmo que os objetos tenham saído do escopo, sempre há memória alocada para eles até que eu selecione uma nova imagem. Eu posso reproduzi-lo com o padrão do Windows Phone Direct3D com XAML App. As únicas modificações no projeto padrão são as seguintes:
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>