当前位置: 首页 > 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.jsqmd.com/news/3468/

相关文章:

  • 呼叫中心开源社区专栏第一篇 - 详解
  • 完整教程:【设计模式】适配器模式
  • 原核表达可溶性蛋白难题破解
  • 深入解析:Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)
  • Torch中的tensor size
  • 深入解析:贪心算法之船舶装载问题
  • Codeforces 1053 (Div.2)
  • 抗体药物偶联物(ADCs)生物分析:拆解 “靶向导弹” 体内轨迹的核心技术
  • 深入解析:文献阅读 | iMetaMed | FigureYa:一个标准化可视化框架,用于增强生物医学数据解释和研究效率
  • spring boot方案利用Torna生成在线接口文档
  • C#关键字 unchecked与checked - 教程
  • 详细介绍:微服务的适用边界:从金融科技到量子计算的架构哲学
  • 使用IOT-Tree整合复杂计算模型(含AI模型),并对接现场设备优化控制(节能提效)技能方案
  • 单独
  • 为什么应该测试无JavaScript的页面体验
  • 完整教程:UE5小游戏开发 - 武士决斗
  • 经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡
  • PolarFire SOC Auto Update 和 IAP 文档阅读(三) AUTO UPDATE
  • 前台部分数据不显示
  • 指针定义以及二维数组内存地址(java/c++/python)
  • 一款不错的PDF工具,吾爱出品 - 教程
  • 解码数据结构线性表之顺序表
  • 中电金信:源启数据集成平台全新升级,实现便捷与性能双飞跃
  • Jupyter NoteBook / Jupyter Lab的安装与使用
  • 完整教程:科技的温情——挽救鼠鼠/兔兔的生命
  • 易基因:Nat Rev Drug Discov/IF101.8:何川团队顶刊综述RNA修饰系统作为疾病治疗靶点的研究进展
  • 国产适配 + AI 一键生成!亿图图示 14.5 全平台绘图指南:260 种图表 + Visio 兼容,开发者 / 办公党速藏
  • 关闭Cadence Allegro Design Entry CIS(OrCAD Capture)的Start Page
  • Mini L-CTF 2025 WP
  • K8S APIServer压力高,导致控制器Leader续约失败而重启问题