日期:2014-05-20  浏览次数:20892 次

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(); //加这个

把添加的也一起放在里面,试试,看速度能提高多少..