c# listbox 显示大量数据速度很慢,如何解决?

c#使用listbox加载10m以上数据,第一次显示的时候速度很慢要几分钟,cpu占用%100,如何解决这个问题?谢谢,不用考虑这种设计是否合理
具体是这样实现的:
form里有两个tabpage1和tabpage2,当前窗体默认给用户呈现的是tabpage1,listbox是在tabpage2中,通过items.add把所有数据都加入listbox,程序运行完毕后,用户从tabpage1切换到tabpage2,这个时候显示listbox所有内容的过程就很慢,要好几分钟,cpu占用达到100%。
不考虑分页,如何能使显示时间减少?

谢谢,10m的记录总字节,先不考虑分页(因为涉及到各个tabpage自动跳转功能),能否解决这个问题?

10m内容是直接从另一个程序的文本日志取过来的,循环add的速度用户可以接受,就是第一次显示很慢,只要第一次显示完成后,再怎么切换都很顺畅。

多谢各位,咱们先解决如何提高listbox第一次显示大量数据的效率?

第1个回答  推荐于2017-09-11
用这个方法可能稍微快点,我的机子上要19秒文件8.48M
private void button1_Click(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
string[] strArr = File.ReadAllLines("D:\\AAAA.txt", Encoding.Default);
listBox1.DataSource = strArr;
TimeSpan ts = DateTime.Now - dt;
MessageBox.Show(ts.Seconds.ToString());
}本回答被网友采纳
第2个回答  2009-07-03
第一 为什么不考虑是否合理 100%不合理
解决方法
1.优化数据库
2.用存储过程写
3.分批ITEM.ADD 意思就是 你可以1M 1M的加 就比较快了
第3个回答  2009-07-03
设计的绝对的不合理。想你这样如果100M的数据,你有没有想过数据量多大?
你这样循环ADD。时间不久才怪。最好的方式就是利用算法,一次取多少。
第4个回答  2009-07-03
10m以上数据太多了。而且用items.add这样来增加数据循环的次太多了,如果是用来显示的用datagridview速度会提高很多。
第5个回答  2009-07-03
10m是多少?
是记录数,还是记录总字节?
如果是我,我会想办法分页。
你呈现给用户10M的记录有意义么?得看到什么时候?交互性不好,不友好!

c# listbox 显示大量数据速度很慢,如何解决?
用这个方法可能稍微快点,我的机子上要19秒文件8.48M private void button1_Click(object sender, EventArgs e){ DateTime dt = DateTime.Now;string[] strArr = File.ReadAllLines("D:\\\\AAAA.txt", Encoding.Default);listBox1.DataSource = strArr;TimeSpan ts = DateTime.Now - dt;MessageBox...

C#里我写了一段清除ListBok里面重复的项的代码,但是不够简洁,数据量大...
第二种方式,是通过建立一个Dictonary对象来缓存以出现过的值,在循环过程中把所有包含在缓存中的项都删除:private void button2_Click(object sender, EventArgs e){ ListBox.ObjectCollection items = this.listBox1.Items; Dictionary exstis = new Dictionary(); for (int i = count -...

c# 界面 显示太慢
150个文本框哪界面的易用性肯定是极差了。你可以做成多个页面,输入完一个按下一页,一般就是这样输入的。当然不用多个页面也行,用datagrid也支持文本框输入,就是类似直接在表格中修改,不过有点难度。listbox也行,每选中一个输入一项,这样一个textbox就可以 ...

关于C#中listbox多行输出的问题?
1)设置ListBox的SelectionMode属性,如下图 2)显示被选中的项 private void button1_Click(object sender, EventArgs e) { string s = string.Empty; foreach (var item in listBox1.SelectedItems) { s += item.ToString(); s += Environment.NewLine; } if (!st...

往listbox里加的对象为何显示不出来(c#)
可以通过设置listbox的TableIndex的值,来设置默认值。访问可以用 selectItems 或者 selectIndex,选中的值或选中的值的索引

c# winform中的listBox插入值的时候闪烁的厉害
很正常,可能你插入数据太多了,因为本身listBox就是简单控件,所谓的插入也就是简单调用object.ToString()。因此如果大规模处理或显示数据,可以考虑DataGrid或ListView,这些是高级控件。

c# listbox数据绑定后出现的小问题
你加载listbox时候,把默认选择为第一个;或者你最左边的listbox的selectedindex事件没有实现把数据显示到最右边的对应控件中 因为你点击最左边的item时并没有触发中间listbox的显示数据事件

C#中LISTBOX中可不可以无限个的放数据
放无限个就成死循环了。从设计上来说,最多也就放 2 的 32 次方个,因为 items.count 的类型是整数。参考资料:http:\/\/zhidao.baidu.com\/question\/11067663.html

C#listbox,为什么不能直接显示内容,而我必须单击一下控件中的空白处才能...
进入后直接显示数据需要在formload时进行数据绑定操作,所以打开不会显示内容,而单击控件空白处其实相当于选择了另一项,引起SelectedIndexChanged事件执行了你的代码。

c# listbox 显示问题,怎么整齐显示。
GridLines = true; \/\/显示表格线 Linelist.View = View.Details;\/\/显示表格细节 Linelist.FullRowSelect = true;\/\/是否可以选择行 Linelist.Columns.Add("姓名", 60);Linelist.Columns.Add("成绩", 60);Linelist.Columns.Add("关卡", 100);解释:Linelist(listbox),Add为 添加列 望采纳 ...

相似回答