C# 在WPF视图中显示许多图像会消耗太多内存

C# 在WPF视图中显示许多图像会消耗太多内存,c#,wpf,performance,C#,Wpf,Performance,我正在开发一个WPF应用程序,我需要在一个窗口中显示7200个图像。 每个图像大小等于300x300。 我的代码“*.xaml”如下所示: <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> <ItemsControl ItemsSource="{Binding Results}"> <ItemsCon

我正在开发一个WPF应用程序,我需要在一个窗口中显示7200个图像。 每个图像大小等于300x300。 我的代码“*.xaml”如下所示:

  <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <ItemsControl ItemsSource="{Binding Results}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Height="180">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="40" />
                            <ColumnDefinition Width="180" />
                            <ColumnDefinition Width="180" />
                            <ColumnDefinition Width="180" />
                            <ColumnDefinition Width="180" />
                            <ColumnDefinition Width="180" />
                        </Grid.ColumnDefinitions>
                            <Grid Grid.Column="0" Margin="2">
                                <Label Content="{Binding Frame}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Grid>
                            <Grid Grid.Column="1" Margin="2">  
                                <Grid.Background>
                                    <ImageBrush ImageSource="{Binding FrameImage}"/>
                                </Grid.Background>
                                <Image Source="{Binding FrameImage}"/>
                            </Grid>
                            <Grid Grid.Column="2" Margin="2">
                                <Grid.Background>
                                    <ImageBrush ImageSource="{Binding FrameMatch}"/>
                                </Grid.Background>
                                <Image Source="{Binding FrameMatch}"/>
                            </Grid>
                            <Grid Grid.Column="3" Margin="2">
                                <Grid.Background>
                                    <ImageBrush ImageSource="{Binding ObjMatch}"/>
                                </Grid.Background>
                                <Image Source="{Binding ObjMatch}"/>
                            </Grid>
                            <Grid Grid.Column="4" Margin="2">

                                <Image Source="{Binding ObjImage}"/>
                            </Grid>
                            <Grid Grid.Column="5" Margin="2">
                                <Label Content="{Binding Fitness}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Grid>
                        </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
   </ScrollViewer>

问题是程序消耗了大量内存。 有可能克服这个问题吗? 谁能给我一个解决办法

有可能克服这个问题吗?谁能给我一个解决办法

不要同时显示7200 300x300图像。这远远超过了任何一台显示器一次显示的能力,因此最好将其虚拟化,只显示屏幕上的图像


这可以通过使用或甚至通过实现自定义控件来实现。

尝试“虚拟化”您的UI语句的哪一部分是“此问题”?我不认为“内存太多”是正确的说法,可能应该是“我不喜欢它消耗的内存太多,即使我知道所有需要的内存,因为我需要同时加载至少7200*360K字节(~2.5GB)。@AlexeiLevenkov现在我正在读关于虚拟化UI的书,我找到了我的答案,感谢Reed Copsey,在此之前,一家公司正在寻找一种方法,在可能的情况下释放图像资源。