往ListView中添加图标只能从ImageList中引用,开始图标量少,没有觉得速度上有任何问题,但是随着图标量达到几百个的时候很明显能感觉到插入过程非常慢,而达到上千个的时候那等待已经达到需要十几秒甚至更长的时间了。
开始,以为是读取这1000个图标文件影响速度,就从提取图标的路径入手,就是把图标文件转移到资源文件中,这样虽然能提高一点速度但是还是不明显。然后,重新分析了一下速度慢的原因,发现,在往ImageList中增加图标时和置ListView中ImageKey时这两步速度最慢,尤其是图标多了以后更加明显。
尝试性的,不使用图标的ImageKey,而直接使用ImageIndex给ListView置图标(往ImageList中添加图标时也不使用Key),这样速度又稍微快了一些,但是离预期目标还是有些距离。
经过多次、多种不同的方式的尝试,最终我选用多线程的办法实现图标的显示,也就是往ListVIew中插数据的时候不置图标,或者置一个通用图标,插入完成之后使用另一个线程“慢慢”的对图标进行添加(置换)。
实现代码:
// 填充图标后,建立线程对图标进行操作 UpdateIcon uIcon = new UpdateIcon(this); |
//更新图标 public void updateIcon(DataRow row) foreach (ListViewItem tlvi in this.listView.Items) Bitmap img = new Bitmap(new MemoryStream(Convert.FromBase64String(row["i"].ToString()))); if (row["f"] == DBNull.Value) //提出图标,并置黑白 this.imageList1.Images.Add(img); Application.DoEvents(); |
using System; namespace Swift.ROM private FormMain formMain; public UpdateIcon(FormMain form) public void Start() |