代码之家  ›  专栏  ›  技术社区  ›  Slauma

StackPanel中的DataGrid导致内存不足异常

  •  1
  • Slauma  · 技术社区  · 14 年前

    我在一个WPF窗口中有网格,在其中有一个DataGrid控件:

    <Grid>
        <DataGrid ItemsSource="{Binding AllAuthors}" />
    </Grid>
    

    AllAuthors 是一个 ObservableCollection<Author> Author 只有几个字符串属性的简单类。在代码隐藏中,集合中填充了大约40000个对象。数据报打开得很快(1秒后),通过数据报的导航变得平滑和快速。应用程序的内存负载为35 MB。

    如果我将上面的代码替换为…

    <StackPanel>
        <DataGrid ItemsSource="{Binding AllAuthors}" />
    </StackPanel>
    

    …应用程序以100%的CPU负载运行,当应用程序试图显示数据报时,内存将持续增长到1.5GB。最后我收到一个 OutOfMemoryException .

    我是WPF初学者,现在想知道这里出了什么问题。 (我使用的是VS2010,.NET 4.0和WPF 4.0的内置数据报控件)

    1 回复  |  直到 14 年前
        1
  •  1
  •   bitbonk    14 年前

    但是,当您将它放入stackpanel时,您可能已经构建了一个布局,其中stackpanel扩展到数据报的高度,而数据报占用了它认为需要的空间。我们需要查看完整的XAML来查看是否是这种情况。不管怎样,如果是的话,现在实际上有很多“可见”的项目(即所有项目)。生成40000个项目显然不是一个好主意。

    您比较了两个数据报的ActualHeight属性了吗?