我正在开发一个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>
问题在于程序消耗大量内存。 有可能克服这个问题吗? 任何人都可以给我一个解决方案吗?
答案 0 :(得分:3)
有可能克服这个问题吗?任何人都可以给我一个解决方案吗?
不要同时显示7200 300x300图像 。这远远超过任何监视器能够一次显示,因此最好将其虚拟化,并仅显示屏幕上的图像。
可以使用VirtualizingStackPanel
,甚至使用bidirectional virtualization实现自定义控件来完成此操作。