Mam wyciek pamięci, gdy tylko utworzę instancję z WriteableBitmap
. Próbowałem wielu sugestii na stackoverflow i innych forach, ale nic nie działa. Podstawowy przepływ mojej aplikacji testowej jest taka:Wystąpienie pamięci WriteableBitmap w systemie Windows Phone 8
- Wybierz obraz z
PhotoChooserTask
- Użyj
Stream
od obiektuPhotoResult
stworzyćWriteableBitmap
.
To wszystko. Nulling zmiennych i wywoływanie GC.Collect()
rozwiązuje tylko część problemu. Uniemożliwia to aplikacji przydzielanie pamięci do momentu awarii aplikacji, ale nawet jeśli obiekty wykroczyły poza zakres, zawsze przydzielana jest pamięć, dopóki nie zostanie wybrany nowy obraz. Mogę go odtworzyć za pomocą domyślnego Windows Phone Direct3D z aplikacją XAML. Jedyne modyfikacje projektu domyślne są następujące:
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>
Witam, znam ten problem, jakieś rozwiązanie? –