请问为什么winform的listbox有2000行数据时,添加数据很快,而用removeat删除效率却很低下呢? winformlistboxremoveat效率低下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得把2000个条目加入listbox本身就有问题,还有就是从最后一个开始反向删除速度会快些 原因找到了,查看中间代码才看到原来是listbox设计的Add与RemoveAt的方法效率有区别,具体请看下列方法,同时也需求解决方案。public object Add(object item){ this.EnsureSpace(1); this.version++; this.entries[this.count] = new Entry(item); return this.entries[this.count++];}public void RemoveAt(int index){ this.count--; for (int i = index; i < this.count; i++) { this.entries[i] = this.entries[i + 1]; } this.entries[this.count] = null; this.version++;} 寻求解决效率问题的方案。 先把循环里的 Application.DoEvents() ; 去掉。 List<Stirng> tmp = new List<Stirng>();tmp.AddRange(listBox.Items);listBox.Items.Clear();listBox.Items.AddRange(tmp.GetRange(100, tmp.Count - 100)); 反过来做, 新建一个空的LIST, 再把满足条件的加进去。 然后控件绑定新建的LIST删除的时候移位操作因为是必须, 所以无法提升效率 我的程序是多线程并跨线程访问的,用List或ArrayList不是线程安全的,程序会出问题。应该有更有效率的操作方法。移位操作确实是一个“缺陷”。 经过今天的努力,终于提高了效率,现在我就把提高效率的方法打出来。首先建立List<string> todo=new List<string>();将数据加入todo里,然后使用数据绑定。listBox1.DataSource = null;listBox1.DataSource = todo;修改todo的时候最好进行lock锁定。lock (todo) { string str = todo[0]; todo.RemoveAt(0); }效率提高了很多很多 网络游戏的服务端 有人用C#做出过吗? c#调用C++写的DLL,提示未将对象引用设置到对象的实例,帮帮我啊 为什么数据没有显示出来?(低级问题) 多用户登录系统更改数据,如何及时刷新数据 游戏引擎架构 告别编程,散尽余分!!!!!!!!! 机票查询接口,机票ibe接口,机票网站建设,飞机票查询系统 关于dll设计 C# winform中怎样加入Flash做的界面??? 生成一定制控件时,如何使它的属性在其它用户设计时是用组合框显示选择,而非输入 请问高手以 soctket TCP 方式的通信,服务器的端口 是否就是 iis 的 web 端口 C#命名管道的通信速度问题
原来是listbox设计的Add与RemoveAt的方法效率有区别,具体请看下列方法,同时也需求解决方案。
public object Add(object item)
{
this.EnsureSpace(1);
this.version++;
this.entries[this.count] = new Entry(item);
return this.entries[this.count++];
}public void RemoveAt(int index)
{
this.count--;
for (int i = index; i < this.count; i++)
{
this.entries[i] = this.entries[i + 1];
}
this.entries[this.count] = null;
this.version++;
}
寻求解决效率问题的方案。
tmp.AddRange(listBox.Items);
listBox.Items.Clear();
listBox.Items.AddRange(tmp.GetRange(100, tmp.Count - 100));
我的程序是多线程并跨线程访问的,用List或ArrayList不是线程安全的,程序会出问题。
应该有更有效率的操作方法。移位操作确实是一个“缺陷”。
首先建立List<string> todo=new List<string>();将数据加入todo里,然后使用数据绑定。listBox1.DataSource = null;
listBox1.DataSource = todo;修改todo的时候最好进行lock锁定。lock (todo)
{
string str = todo[0];
todo.RemoveAt(0);
}
效率提高了很多很多