求助,关于ListView加载数据慢的问题

[复制链接]
查看11 | 回复6 | 2021-1-27 05:31:26 | 显示全部楼层 |阅读模式
读取一个列表,数据有2000条,在本地测试速度很快,大概2秒左右。但是把数据库连接改到外网服务器,速度就慢了很多,大概30秒左右。程序复制到服务器上速度又很快,数据库连接用外网IP或者.都一样不影响速度。服务器带宽5M,请大神帮忙
privatevoidreminderListUpload()
{
intnum=0;
intqtid=int.Parse(this.cbGroupQuestionType.SelectedValue.ToString());
litRge=rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"),1,qtid);//数据库查询出需要加载的数据
if(litRge.Count>0)
{
this.lvReminderList.Items.Clear();
this.lvReminderList.BeginUpdate();
foreach(ReminderGrouping_ext_PrginlitRge)//遍历查询出来的数据
{
rg.reminderLogSum=rleS.CalcCount("reminderId="+rg.id);
this.backgroundWorker1.ReportProgress(num);
ListViewItemlv=newListViewItem();
lv.UseItemStyleForSubItems=false;
lv.Text=rg.id.ToString();//设置第一行显示的数据
//绑定剩余列的数据
lv.SubItems.Add((num+1).ToString());
lv.SubItems.Add(rg.carNumber.Trim().ToString());
lv.SubItems.Add(rg.custName.Trim());
lv.SubItems.Add(rg.custPhone1.Trim()+","+rg.custPhone1.Trim());
/*下面这段代码几乎不影响加载速度*/
if(rg.isOffer==1)
{
lv.SubItems.Add("是",Color.Empty,Color.Green,null);
}
else
{
lv.SubItems.Add("否");
}
if(int.Parse(rg.reminderLogSum.ToString())=3)
{
lv.SubItems.Add(rg.reminderLogSum.ToString(),Color.Empty,Color.Yellow,null);
}
elseif(int.Parse(rg.reminderLogSum.ToString())>=7)
{
lv.SubItems.Add(rg.reminderLogSum.ToString(),Color.Empty,Color.Red,null);
}
else
{
lv.SubItems.Add(rg.reminderLogSum.ToString());
}
/**************************************************/
lv.SubItems.Add(rg.questionTypeName.Trim());
lv.SubItems.Add(rg.reminderTime.ToString());
lv.SubItems.Add(rg.remarks.ToString());
lv.SubItems.Add(rg.updateTime.ToString());
lv.SubItems.Add(rg.addTime.ToString());
//行数据创建完毕后添加到列表中
this.lvReminderList.Items.Add(lv);
num++;
}
this.lvReminderList.EndUpdate();
}
else
{
this.lvReminderList.Items.Clear();
}
}

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
你给这段代码litRge=rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"),1,qtid);//数据库查询出需要加载的数据
前后加个日志记录时间;看看是不是数据库连接出现的问题,还有就是第一次加载都挺慢,30秒就有点不正常了。
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
1,查询需要查询字段,
2.查询到的数据ListView分页显示https://www.cnblogs.com/suntanyong88/p/5531482.html
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
引用1楼耗子哭死猫的回复:你给这段代码litRge=rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"),1,qtid);//数据库查询出需要加载的数据
前后加个日志记录时间;看看是不是数据库连接出现的问题,还有就是第一次加载都挺慢,30秒就有点不正常了。


Stopwatchwatch=newStopwatch();//实例化一个监控对象
watch.Start();//开始监控业务逻辑
litRge=rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"),1,qtid);
Thread.Sleep(10);//将线程延迟10毫秒。一个多这样的测试,多要使用到线程方面
watch.Stop();//结束监控
MessageBox.Show(watch.ElapsedMilliseconds.ToString());//输出计时结果,单位:毫秒
连接远程服务器是587毫秒,程序放服务器上是56毫秒。
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
远程访问数据库本来就慢,而且不赞成连接远程数据库,最好在中间加一层WebService,可以考虑用WCF来实现,WebService跟数据放一台服务器上或是同一个局域网。
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
在网络上,不建议频繁建立连接,那样的话在网络会话中,连接的建立(TCP握手)、关闭会消耗大量时间。建议增加连接池,或一次性获取、更新批量数据。
在本机,网络连接走回环(loop),速度快得多且不受带宽限制。
回复

使用道具 举报

千问 | 2021-1-27 05:31:26 | 显示全部楼层
这种情况我就先不关心你的代码了,我们用第3方中立测试程序去测试。
如果说第3方中立代码也一样结果。那么提交你的测试报告让你的领导去想办法
如果第3方中立代码没问题,那么在过来问怎么解决你自己代码的问题。
ps:我们来一个实际情况,某现场程序员根据文档调试一个串口设备,调试3天都调试不通。而厂家自己的调试工具可以。双方各执一词都说对方有问题。我们说ok,先别说谁有问题,用第3方中立工具测试。测试结果双方都没有问题,问题是“厂家文档是错的,现场的实际协议和文档写的不一样”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行