Стратегии кэширования элементов ListView

Последнее обновление: 23.01.2023

Хотя ListView является двольно мощным элементом для отображения данных, он все таки имеет некоторые ограничения. При определении сложного содержимого, сложной структуры ячеек в ListView может ухудшиться скроллинг, поскольку при пролистывании системе нужно будет выполнить множество вычислений. Однако существуют приемы и способы, которые позволят повысить производительность и постараться нивелировать возможный отрицательный эффект при подобных действиях.

Элемент ListView в .NET MAUI опирается на нативные реализации этого элемента на Android, iOS, WinUI, и на каждой из этих платформ реализации ListView имеют встроенные возможности по кэшированию ранее использованных строк. То есть, как правило, в память загружаются только те ячейки ListView, которые в текущий момент видны на экране. Соответственно контент загружается только в эти ячейки. Это позволяет не создавать тысячи объектов, которые номинально имеются в списке, тем самым уменьшая потребление памяти.

В .NET MAUI существуют две стратегии кэширования, которые описываются перечислением ListViewCachingStrategy. Для каждой стратегии в этом перечислении определено соответствующее значение:

  • RetainElement

  • RecycleElement

RetainElement

По умолчанию к ListView в .NET MAUI применяется значение RetainElement. Оно означает, что ListView будет создавать ячейку для каждого элемена в списке.

В каких случаях данная стратегия может быть предпочтительной:

  • Когда каждая ячейка ListView имеет большое количество привязок (20-30 и более)

  • Когда шаблон ячейки часто меняется

  • Когда другая стратегия RecycleElement при тех же условиях показывает худшие результаты

RecycleElement

RecycleElement позволяет повторно использовать одни и те же ячейки, вместо их создания каждый раз, когда они попадают в зону видимости. Эта стратегия может быть предпочтительной в следующих случаях:

  • Когда каждая ячейка ListView имеет небольшое количество привязок

  • Когда свойство BindingContext ячейки определяет все ее данные

  • Когда ячейки во многом аналогичны, а их шаблон остается неизменным

Для установки стратегии кэширования у ListView в XAML применяется атрибут CachingStrategy:

<ListView CachingStrategy="RecycleElement">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
              ...
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

В коде C# аналогом является передача в конструктор значения ListViewCachingStrategy:

ListView listView = new ListView(ListViewCachingStrategy.RecycleElement);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850