ListView加载的问题
StalistView是一个WinForm里面的ListView控件
绑定行大约1800,我第一次登录,绑定较快,但是当我重登录的时候,这就很慢
麻烦大家给指点下,我跟一下,时间就耗在循环的地方,令我奇怪的是,为什么第一次和第二次差近8秒种时间,才能加载
private void LoadStaListToStalistView()
{
DataSet Ds = new DataSet();
Da = new SqlDataAdapter( "Select * from StationInfo Order by StationID " , Conn) ;
Da.Fill(Ds);
StalistView.Items.Clear();
for(int i=0 ;i < Ds.Tables[0].Rows.Count ; i++ )
{
ListViewItem item1;
item1= StalistView.Items.Add( Ds.Tables[0].Rows[i][ "StationID "].ToString() );
//item1.SubItems.Add( Ds.Tables[0].Rows[i][ "Accounts "].ToString() );
item1.SubItems.Add( Ds.Tables[0].Rows[i][ "StationName "].ToString() );
item1.SubItems.Add( Ds.Tables[0].Rows[i][ "MAC "].ToString() );
item1.ImageIndex = 10 ;
}
this.StalistView.ListViewItemSorter = new CustomCls.ListViewItemComparer(0,0,this.StalistView.Sorting);
}
------解决方案-------------------- StalistView.Items.Clear();
StalistView.BeginUpdate(); //加这个
for(int i=0 ;i < Ds.Tables[0].Rows.Count ; i++ )
{
ListViewItem item1;
item1= StalistView.Items.Add( Ds.Tables[0].Rows[i][ "StationID "].ToString() );
//item1.SubItems.Add( Ds.Tables[0].Rows[i][ "Accounts "].ToString() );
item1.SubItems.Add( Ds.Tables[0].Rows[i][ "StationName "].ToString() );
item1.SubItems.Add( Ds.Tables[0].Rows[i][ "MAC "].ToString() );
item1.ImageIndex = 10 ;
}
StalistView.EndUpdate(); //加这个
------解决方案--------------------估计你的时间花在 StalistView.Items.Clear();上
------解决方案--------------------把
StalistView.Items.Clear();
改成手动逐个删除
------解决方案--------------------Items.Clear()会比较费时间..
------解决方案--------------------TO:为什么第一次和第二次差近8秒种时间,才能加载
之所以时间会相差这么多,主要是因为都花在清除ListView所有项..
所以你用“BeginUpdate(),EndUpdate()只是完成一次性加载”没有什么效果..
但你1800条记录删除,花几秒钟也情有可原啊..
------解决方案--------------------应该是这一句出问题:第一次你可能不需要StalistView.Items.Clear();但是第二次你有了1800
------解决方案--------------------能不能不用ListView,用DataGridView可以不?
那样直接绑定数据源,也不涉及删除的操作,重新绑定就行了..
如果非得用ListView,你别用DataTable,换成DataReader看看会不会稍快一点(至于哪个快,我也不是很清楚),但就算快,也只能提高循环加载ListView的速度,对于删除还是一样的效果..
因为你的记录不少哦,一千多条啊..
------解决方案--------------------ListView删除速度最快,应该是这样了..
StalistView.BeginUpdate(); //加这个
StalistView.Items.Clear();
StalistView.EndUpdate(); //加这个
把添加的也一起放在里面,试试,看速度能提高多少..