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

news/2025/9/26 16:39:16/文章来源:https://www.cnblogs.com/Fred1987/p/19110987
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.mzph.cn/news/916973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务好的赣州网站建设上海缪斯设计公司

jquery修改选中状态的方法&#xff1a;1、使用addClass和removeClass方法&#xff0c;可以向选中的元素添加一个多个类名&#xff0c;从而改变其样式或状态&#xff1b;2、使用toggleClass方法&#xff0c;可以在选中元素上添加或移除一个类名&#xff0c;如果该类名已经存在&a…

呼叫中心开源社区专栏第一篇 - 详解

呼叫中心开源社区专栏第一篇 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

完整教程:【设计模式】适配器模式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

北京网站建设方案系统网络平台代理

1.首先创建boot分区(200M即可) boot分区作为linux启动相关信息的存储介质&#xff0c;不论boot分区什么时候&#xff0c;它都会排在整个硬盘的起始段&#xff0c;方便系统启动获取相关信息&#xff0c;用户尽量不去更改boot分区的挂载点顺序。 2.接着创建swap分区&#xff08;应…

原核表达可溶性蛋白难题破解

原核表达可溶性蛋白难题破解在生物医药、疫苗研发、结构生物学和酶工程等领域,重组蛋白的表达与纯化是基础性技术之一。其中,原核表达系统因其高效、成本低廉而成为研究和工业生产中的首选平台。然而,如何获得高可溶…

深入解析:Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)

深入解析:Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

做外贸网站信息怎么让网站收录

一级缓存 Mybatis对缓存提供支持&#xff0c;但是在没有配置的默认情况下&#xff0c;它只开启一级缓存&#xff0c;一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下&#xff0c;我们使用同一个SqlSession对象调用一个Mapper方法&#xff0c;往往只执…

如何向搜索引擎提交网站seo 网站改版

一、projecrion函数 题目&#xff1a;projecrion函数中的第一个参数fov和第二个参数ratio参数进行实验。看能否搞懂它们是如何影响透视平截头体的。 当ratio不变&#xff0c;fov值变大&#xff0c;显示的物体会变小&#xff1b;当fov不变&#xff0c;radio值变大&#xff0c;…

Torch中的tensor size

本文重点介绍了一下如何在PyTorch中去计算一个高维tensor的大小,也就是元素的总数。在其他框架中我们需要使用size函数来获取,而在PyTorch框架中这个接口被调整为numel,本文给出了两个具体代码示例。技术背景 其实对…

深入解析:贪心算法之船舶装载问题

深入解析:贪心算法之船舶装载问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

Codeforces 1053 (Div.2)

Codeforces 1053 (Div.2)Codeforces 1053 (Div.2) C. Incremental Stay 题意: 有n个人,存在2*n个时刻,分配这2n个时刻给予n个人进出的时间,输出当博物馆容量为(1-n)时,这些人呆在博物馆的总时长最大值 思路: 对于\…

抗体药物偶联物(ADCs)生物分析:拆解 “靶向导弹” 体内轨迹的核心技术

在肿瘤治疗领域,抗体药物偶联物(ADCs)堪称 “精准导弹”—— 凭借抗体的靶向性将细胞毒性载荷递送至肿瘤细胞,既突破了传统化疗的非特异性毒性,又解决了部分抗体药物疗效不足的问题。截至 2024 年,全球已有十余款…

深入解析:文献阅读 | iMetaMed | FigureYa:一个标准化可视化框架,用于增强生物医学数据解释和研究效率

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

spring boot方案利用Torna生成在线接口文档

spring boot方案利用Torna生成在线接口文档pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

C#关键字 unchecked与checked - 教程

C#关键字 unchecked与checked - 教程2025-09-25 12:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

做营销型网站的教程网站建设方案论文1500

6&#xff0c;BGP的基本配置 1&#xff0c;BGP建邻的基本关系 1&#xff0c;EBGP对等体关系直接建邻 [r1]bgp 1----启动BGP进程---后面的1不是进程号&#xff0c;而是配置路由器所在AS的AS号 [r1-bgp] [r1-bgp]router-id 1.1.1.1---配置RID [r1-bgp]peer 12.0.0.2 as-number-…

网站建设分析徐州整站优化

shell的模拟实现 我们知道shell是一个永不退出的程序&#xff0c;所以他应该是一个死循环&#xff0c;并且shell为了防止影响到自己&#xff0c;我们在命令行上输入的所有命令都是由shell的子进程来执行的&#xff0c;所以它应该要有创建子进程的相关函数&#xff0c;当然也会…

网站外链建设工作计划建站合作

第3部分 hashCode() 的作用 hashCode() 的作用是获取哈希码&#xff0c;也称为散列码&#xff1b;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 hashCode() 定义在JDK的Object.java中&#xff0c;这就意味着Java中的任何类都包含有hashCo…

详细介绍:微服务的适用边界:从金融科技到量子计算的架构哲学

详细介绍:微服务的适用边界:从金融科技到量子计算的架构哲学pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

静态网站可以做哪些wordpress有后端吗

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&#xff0c…