6

ObservableCollectionにバインドし、ファイル名を使用して画像を表示するリストボックスがあります ここに画像の説明を入力してください

私のxamlは次のとおりです。

<Window x:Class="ThumbnailsView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="578" WindowStartupLocation="CenterScreen">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="55"/>
        </Grid.RowDefinitions>

            <ListBox Grid.Row="0" x:Name="ImageListbox"
        ItemsSource="{Binding}" 
        Background="AliceBlue" ScrollViewer.HorizontalScrollBarVisibility="Disabled">

                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox Height="16" VerticalAlignment="Top" Margin="0,10,0,0"/>
                            <Image Margin="10,10,10,0" Height="64" Width="64" VerticalAlignment="Top">
                                <Image.Source>
                                    <BitmapImage DecodePixelWidth="64" UriSource="{Binding Path=Name}"/>
                                </Image.Source>                            
                            </Image>
                    </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>

        <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
            </ListBox>

            <Button Grid.Row="1" Content="Get Images" Name="getImageBtn" Click="getImageBtn_Click" Width="100" Height="30"></Button>

    </Grid>
</Window>

問題は、画像全体をロードし、コレクションが大きい場合は大量のRAMを消費することです。メモリ消費を最小限に抑える方法は?

4

3 に答える 3

4

UI 仮想化を有効にします。次に、UI コントロールが再利用され、最小限のメモリが使用されます。

本格的な写真の代わりにサムネイルを読み込むこともできます。


読むべきいくつかのリソース:

http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization https://stackoverflow.com/questions/14456075/how-to-enable-ui-virtualization-in-standard-wpf-listview WPF リストボックスListBox を使用 - UI の仮想化とスクロール http://www.zagstudio.com/blog/497#.UQKxpScqb6U

于 2013-01-25T16:20:25.450 に答える
0

画像が読み込まれたら、より扱いやすいサイズにサイズ変更してから、未使用の大きな画像を解放します。これでも読み込みに時間がかかりますが、メモリの消費量は少なくなります。読み込み時間を短縮するには、dutzu's回答を参照し、遅延読み込みと仮想化を使用してください。

于 2013-01-25T16:24:26.280 に答える
0

仮想化スタックパネルを使用する方法の例については、リンクを参照してください。

http://www.jonathanantoine.com/2011/10/07/wpf-4-5-%E2%80%93-part-11-new-features-for-the-virtualizingpanel/

于 2013-01-25T16:24:38.067 に答える