【发布时间】:2015-08-25 15:45:39
【问题描述】:
我在虚拟模式下使用 ListView。当列数增加 (>500) - 绘图变得太慢。滚动挂起。 请告诉我如何摆脱这个问题并提高 ListView 的性能?
简单的测试项目:
public partial class Form1 : Form
{
private const int maxLines = 1000000;//rows
private const int columns = 1024;
ListViewItem lvi = new ListViewItem();
public Form1()
{
InitializeComponent();
//ListView Properties
this.listView1.FullRowSelect = true;
this.listView1.GridLines = true;
this.listView1.MultiSelect = false;
this.listView1.Name = "listView1";
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
this.listView1.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.listView1_RetrieveVirtualItem);
}
private void Form1_Load(object sender, EventArgs e)
{
listView1.VirtualMode = true;
listView1.VirtualListSize = maxLines;
PropertyInfo aProp = typeof(ListView).GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance);
aProp.SetValue(listView1, true, null);
//create columns
for (int i = 0; i < columns; i++)
listView1.Columns.Add(i.ToString(), 40);
//create test data
for (int i = 0; i < columns; i++)
{
ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = i.ToString();
lvi.SubItems.Add(lvsi);
}
}
//get item in virtual mode
private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = lvi;
}
}
【问题讨论】:
-
为什么需要 500+ 列?有没有其他方法可以设置您的架构?另外,请提供您的
ListView的代码,以便我们可以看到ItemTemplate。 -
有一个主要项目显示来自 sql 表的数据。转换成另一个组件 - 非常有问题。
标签: c# winforms performance listview scroll