内存泄漏:LongListSelector(WP8)上的MVVM和照片

时间:2014-05-29 13:27:38

标签: c# windows-phone-8 mvvm viewmodel longlistselector

我试图将一些(HD)照片绑定到LongListSelector,如下所示:

        <phone:LongListSelector
            Name="Photos"
            LayoutMode="Grid"
            ItemsSource="{Binding Items}"
            GridCellSize="225, 225"                
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Image Name="Photo"
                         Source="{Binding Source}"
                    </Grid>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>



            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                foreach (string item in resultList)
                {
                    u = new Uri(item, UriKind.RelativeOrAbsolute);
                    this.Items.Add(new DataItemViewModel() { Source = u});
                }                    
            });            

但是每次我回到主页面并点击再次开始(使用新的/不同的照片),ApplicationPeakMemoryUsage会不断增加,直到应用程序自行终止...

对不起,如果这是一个基本问题,但我是C#的新手。

任何提示?

(也许是当用户点击后退按钮时处理LongListSelector或整个页面的方法)

谢谢。

1 个答案:

答案 0 :(得分:0)

上次我遇到这个问题时,我使用了IDipose模式。我遇到的问题是当使用第三方dll时,CLR没有清除dll中的对象。

在我实现了IDispose模式之后,每当我使用该特定对象时,我都将它放在'using'语句中,这确保它在'using'语句的范围结束时被处理掉。有关using语句的更多信息:http://www.dotnetperls.com/using

为了让我意识到这一点,我首先调试了我的代码并观看了任务管理器。在代码的开头创建一个断点,打开任务管理器并单击Processes选项卡。 在您认为问题存在的某些方面之后,请注意内存使用量增加的地方。

完成此操作后,请回复我。

希望它有所帮助,如果没有任何作用,请回复我。)