使用ImageTools for Windows Phone时出现OutOfMemory异常

时间:2014-08-30 12:07:00

标签: c# silverlight windows-phone-8 out-of-memory

我正在尝试在我的Windows Phone 8 Silverlight应用中播放Gif。为此我使用Imagetools。除了有时我得到OutOfMemoryException时,它工作得很好。我正在使用诺基亚Lumia 1020(2 GB RAM,内存使用限制780 MB)进行测试。

我有一个SilverLight ListBox并且其中有多个模板。其中两个是 -

<local:ModuleTemplateSelector.ImageGif>
    <DataTemplate>
        <StackPanel Margin="20,10">
            <imagetools:AnimatedImage Source="{Binding src, Converter={StaticResource ImageConverter}}"/>
        </StackPanel>
    </DataTemplate>
</local:ModuleTemplateSelector.ImageGif>
<local:ModuleTemplateSelector.ImageOther>
    <DataTemplate>
        <Grid Margin="20,10">
            <Image Source="{Binding src}"/>
        </Grid>
    </DataTemplate>
</local:ModuleTemplateSelector.ImageOther>                                      

一个模板用于gifs,另一个模板用于.jpg,.png等。

我使用API​​获取ListBox中的数据。所以,除了.jpg和.png之外,有时还会有超过两三个GIF,这会导致OutOfMemoryException。我确信问题出在Imagetools本身的某个地方。

那么我应该如何避免这种异常呢?还有其他方法可以在Windows Phone 8应用程序中玩GIF吗? 感谢。

1 个答案:

答案 0 :(得分:0)

检查DeviceStatus.ApplicationMemoryUsageLimit返回的内容并尝试在运行时使用DeviceStatus.ApplicationCurrentMemoryUsage监控应用内存使用情况。

但我相信它是已知的ImageTools错误。要在Windows Phone 8 8.1 中显示图像,只需使用默认Image控件。它支持GIF就好了。

编辑: 由于图像控件不支持GIF中的动画,我已经进行了快速搜索 - 您可以尝试使用此修复程序https://imagetools.codeplex.com/workitem/10396进行图像工具:

在构造函数中添加..

this.Unloaded += new RoutedEventHandler(AnimatedImage_Unloaded);



void AnimatedImage_Unloaded(object sender, RoutedEventArgs e)
{
    Stop();
}

这将停止计时器并强制控件在不再使用时被卸载。

或者您可以尝试执行类似http://advertboy.wordpress.com/2012/05/08/animated-gifs-in-xamlc/的操作,并自行制作动画。