Я хочу показать 2000 элементов с изображением (миниатюра).
Если я использую обычный просмотр списка, он будет занимать около 2 ГБ памяти при виртуализации пользовательского интерфейса. Поэтому я попытался решить эту проблему с помощью виртуализации данных с последующим [https://github.com/lvaleriu/Virtualization]. Идея состоит в том, чтобы загрузить только страницу элементов. Когда мы прокручиваем вниз до доступа более чем к половине страницы, запрашивается новая страница. Следовательно, только несколько страниц хранятся в памяти, и потребляемая память составляет около 150 МБ.
Все хорошо, пока я не хочу отображать элементы в виде сетки (например, с помощью панели переноса или унифицированной оболочки). Проблема в том, что все страницы запрашиваются в начале, что приводит к использованию 2 ГБ памяти. Я немного разбираюсь, и проблема может быть на панели предметов. Он пытается загрузить все данные, чтобы найти элемент, и именно этого я и стараюсь избегать.
Кто-нибудь сталкивался с подобной проблемой? Можете ли вы помочь мне разобраться?
Спасибо за продвинутый
<ListView ItemsSource="{Binding}" VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True">
<!-- Problem when I add this part-->
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<!-- End -->
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="MinWidth" Value="200"/>
<Setter Property="MaxWidth" Value="250"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True" MinWidth="200" MaxWidth="250">
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding Data.FullPath}"
TextAlignment="Center" DockPanel.Dock="Bottom" Width="auto"/>
<Image Source="{Binding Data.FullPath, Converter={local:FileToIconConverter}}"
DockPanel.Dock="Top" MaxHeight="200"/>
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Код виртуализации данных можно найти в [https://github.com/lvaleriu/Virtualization] . Я не буду публиковать здесь, так как это немного сложно.