【问题标题】:Windows Phone 8.0 ListBox Out Of Memory ExtensionWindows Phone 8.0 ListBox 内存不足扩展
【发布时间】:2015-02-24 12:06:19
【问题描述】:

对不起我的英语。 我正在执行下一个代码: 在 XAML 中 ...

<Button Content="Add More" Width="160"  Click="Button_Click_2"/>  
<ListBox x:Name="list"/>

...

在 CS 中 ...

 for (int i = 0; i < 20; i++)
            {
             list.Items.Add(new Image { Source = new BitmapImage { UriSource = new Uri("http://pravda-team.ru/eng/image/photo/4/7/4/73474.jpeg") } });
            }

...

此代码有效,但如果我单击按钮几次,则会出现异常“Out Of Memory Extension” 我尝试使用垃圾收集器和自动缓存,但错误仍然存​​在。 我在下一个屏幕截图中看到了这个扩展:

【问题讨论】:

  • 您使用什么手机进行测试?我在我的 Lumia 730 上试过这个。点击按钮数百次,没有注意到这样的错误。图像(一张图像,但多次)已加载一切工作快速流畅。
  • 我在 Lumia 620 上测试。为了简化捕获异常,您必须在文件 App.cs 中添加以下代码: private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { MessageBox.Show (e.ExceptionObject.Message.ToString()); if (Debugger.IsAttached) { Debugger.Break(); } }
  • 是的,我测试过了。看看我的回答。

标签: windows-phone-8 listbox out-of-memory


【解决方案1】:

我认为当您的ListBox 在另一个ScrollViewerStackPanel 中时可能会发生这种情况。通常ListBox 有自己的ScrollViewer,它只呈现当前可见的项目。但是如果你把ListBox 放在ScrollViewer 里面,那么整个ListBox 必须被渲染,你就会遇到内存异常。

这种布局会出问题:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Button Content="add more"
            Grid.Row="1" Click="Button_Click"/>
    <ListBox x:Name="list1" Grid.Row="0"/>
</StackPanel>

但是这个可以正常工作,快速流畅:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ListBox x:Name="list1" Grid.Row="0"/>
    <Button Content="add more"
            Grid.Row="1" Click="Button_Click"/>
</Grid>

如果您希望ListBox 正确滚动,则必须限制其大小。您可以通过将其放置在 Grid 布局中来做到这一点,但设置硬编码的高度也可以。 ListBox 必须知道其视口的大小以优化项目渲染。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多