首页 > 代码库 > WinForm ListView虚拟模式加载数据 提高加载速度
WinForm ListView虚拟模式加载数据 提高加载速度
将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式。控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是为了方便编程人员操作缓冲集合,其参数CacheVirtualItemsEventArgs有StartIndex和EndIndex两个属性在虚拟模式下。
在虚拟模式下,从缓冲之中获取所需的数据进行加载,性能会有很大提高。 在其他情况下,可能需要经常重新计算 ListViewItem 对象的值,对整个集合进行此操作将产生不可接受的性能。
示例代码:
using System; using System.Collections.Generic; using System.Windows.Forms; namespace WinFormTest { public partial class Form1 : Form { private List<ListViewItem> myCache; public Form1() { InitializeComponent(); myCache = new List<ListViewItem>(); } private void Form1_Load(object sender, EventArgs e) { listView1.View = View.Details; listView1.VirtualMode = true; listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView1_RetrieveVirtualItem); } void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { if (myCache != null ) { e.Item = myCache[e.ItemIndex]; } else { //A cache miss, so create a new ListViewItem and pass it back. int x = e.ItemIndex * e.ItemIndex; e.Item = new ListViewItem(x.ToString()); } } private void button1_Click(object sender, EventArgs e) { List<Student> list = GetStudentList(); foreach (var item in list) { ListViewItem listViewItem = new ListViewItem(); listViewItem.SubItems[0].Text = item.Name; listViewItem.SubItems.Add(item.Sex); myCache.Add(listViewItem); } listView1.VirtualListSize = myCache.Count; } private List<Student> GetStudentList() { List<Student> list = new List<Student>(); for (int i = 0; i < 2000; i++) { Student stu = new Student { Name = "student" + i, Sex = "男" }; list.Add(stu); } return list; } private void button2_Click(object sender, EventArgs e) { ListViewItem listItem = new ListViewItem(); listItem.SubItems[0].Text = "女"; listItem.SubItems.Add("哈哈"); myCache.Add(listItem); listView1.VirtualListSize = myCache.Count; listView1.Invalidate(); } } public class Student { public string Sex { get; set; } public string Name { get; set; } } }
WinForm ListView虚拟模式加载数据 提高加载速度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。