【发布时间】:2013-08-23 06:28:45
【问题描述】:
每当我创建WriteableBitmap 的任何实例时,都会发生内存泄漏。我在 stackoverflow 和其他论坛上尝试了多个建议,但没有任何效果。我的测试应用程序的基本流程是这样的:
- 选择带有
PhotoChooserTask的图像 - 使用来自
PhotoResult对象的Stream创建WriteableBitmap。
就是这样。清空变量并调用GC.Collect() 只能解决部分问题。它会阻止应用程序分配内存,直到应用程序崩溃,但即使对象超出范围,在我选择新图像之前,总会为它们分配内存。我可以使用带有 XAML 应用程序的默认 Windows Phone Direct3D 重现它。对默认项目的唯一修改如下:
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>
【问题讨论】:
-
您好,我也遇到了这个问题,请问有解决办法吗?
标签: c# silverlight xaml mobile windows-phone-8