当前位置: 首页 > news >正文

WPF ListBox VirtualizingPanel.CacheLengthUnit=Item VirtualizingPanel.CacheLength=5,5

Install-Package Microsoft.Extensions.DependencyInjection;

 

Totally speaking, VirtualizationPanel.CacheLengthUnit's value is item and its performance is better than pixel, the latter may lead to 

  • Unpredictable memory usage - Caches as many items as fit in the pixel range

  • Performance issues with variable-height items

  • Can cache too many items if items are small, wasting memory

  • Harder to optimize since item count varies based on content

 

VirtualizingPanel.CacheLengthUnit="Item"
VirtualizingPanel.CacheLength="5,5"

 

CacheLength="Before,After"First number (5) = Items cached BEFORE the visible viewportSecond number (5) = Items cached AFTER the visible viewportTotal cached items = 5 + 5 = 10 items (plus whatever is visible)

 

 

<ListBox ItemsSource="{Binding BooksCollection}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLengthUnit="Item"VirtualizingPanel.CacheLength="5,5"ScrollViewer.IsDeferredScrollingEnabled="True"ScrollViewer.CanContentScroll="True"><ListBox.ItemTemplate><DataTemplate><Grid><Grid.Resources><Style TargetType="TextBlock"><Setter Property="FontSize" Value="30"/><Setter Property="Width" Value="Auto"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></Grid.Resources><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock Text="{Binding Id}" Grid.Column="0"/><TextBlock Text="{Binding Name}" Grid.Column="1"/><TextBlock Text="{Binding Author}" Grid.Column="2"/><TextBlock Text="{Binding ISBN}" Grid.Column="3"/><TextBlock Text="{Binding Title}" Grid.Column="4"/><TextBlock Text="{Binding Topic}" Grid.Column="5"/></Grid></DataTemplate></ListBox.ItemTemplate>
</ListBox>public async Task InitBooksCollectionAsync()
{StatusMsg = $"Loading...,{GetMemory()},{GetTimeCost()}";BooksCollection = new ObservableCollection<Book>();List<Book> booksList = new List<Book>();for (int i = 1; i < 100000001; i++){booksList.Add(new Book(){Id = idService.GetID(),Author = $"Author_{i}",Name = nameService.GetName(),ISBN = isbnService.GetISBN(),Title = $"Title_{i}",Topic = $"Topic_{i}"});if (i < 1001 && i % 100 == 0){await PopulateBooksCollectionAsync(booksList);}else if (i > 1000 && i % 1000000 == 0){await PopulateBooksCollectionAsync(booksList);}}if (booksList.Any()){await PopulateBooksCollectionAsync(booksList);}StatusMsg = $"Loaded {BooksCollection.Count} items,{GetMemory()},{GetTimeCost()}";MessageBox.Show(StatusMsg);
}private async Task PopulateBooksCollectionAsync(List<Book> booksList)
{List<Book> tempList = new List<Book>();lock (objLock){tempList = booksList.ToList();booksList.Clear();}await Application.Current.Dispatcher.InvokeAsync(() =>{foreach (var book in tempList){BooksCollection.Add(book);}StatusMsg = $"Loaded {BooksCollection.Count} items,{GetMemory()},{GetTimeCost()}";}, DispatcherPriority.Background);
}private string GetMemory()
{var procMemory = Process.GetCurrentProcess().PrivateMemorySize64 / 1024.0d / 1024.0d;return $"Memory:{procMemory.ToString("#,##0.00")} M";
}private string GetTimeCost()
{return $"Time cost:{watch.Elapsed.TotalSeconds.ToString("#,##0.00")} seconds!";
}

 

 

 

 

image

 

http://www.zskr.cn/news/11495.html

相关文章:

  • 深入解析:Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)
  • 深入解析:贪心算法之船舶装载问题
  • 抗体药物偶联物(ADCs)生物分析:拆解 “靶向导弹” 体内轨迹的核心技术
  • 使用IOT-Tree整合复杂计算模型(含AI模型),并对接现场设备优化控制(节能提效)技能方案
  • 经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡
  • Jupyter NoteBook / Jupyter Lab的安装与使用
  • 易基因:Nat Rev Drug Discov/IF101.8:何川团队顶刊综述RNA修饰系统作为疾病治疗靶点的研究进展
  • Mini L-CTF 2025 WP
  • 【ACM出版、连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 08_多线程编程
  • 【组合数学基础9】Catalan数(卡特兰数)笔记
  • 【IEEE出版】第二届数据挖掘与智能计算国际学术会议(ICDM 2025)
  • 深入解析:贪心算法应用:顶点覆盖问题详解
  • c++编程经典资料
  • PS字体处理
  • 研发项目经理与交付经理的能力差异
  • C#中,EXCEL与表列顺序完全一致情况的导入处理(BeginBinaryImport)
  • Gitee PPM:数据驱动的DevSecOps项目管理新范式
  • acme.sh:强大的ACME协议Shell脚本,支持多DNS API
  • P9545 [湖北省选模拟 2023] 环山危路 / road 题解
  • k8s 兼容寒武纪 - 教程
  • win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye
  • 关于MCO使用配置
  • docker/docker compose/k8s
  • Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏
  • 从MESA模型到锁升级:synchronized性能逆袭的底层逻辑
  • ibero 2025.1 Run PROGRAM_SPI_IMAGE_Action
  • 训练“系统级思维”,听时序数据库 IoTDB Committer 说说从设计到应用的成长
  • 【设计模式】状态模式 - 详解
  • 关于gradle项目启动