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

xiaruiok 2020-07-15 03:51:27
读取一个列表,数据有2000条,在本地测试速度很快,大概2秒左右。但是把数据库连接改到外网服务器,速度就慢了很多,大概30秒左右。程序复制到服务器上速度又很快,数据库连接用外网IP或者.都一样不影响速度。服务器带宽5M,请大神帮忙

private void reminderListUpload()
{
int num = 0;
int qtid = 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_P rg in litRge)//遍历查询出来的数据
{
rg.reminderLogSum = rleS.CalcCount("reminderId=" + rg.id);
this.backgroundWorker1.ReportProgress(num);
ListViewItem lv = new ListViewItem();
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()) < 7 && int.Parse(rg.reminderLogSum.ToString()) >= 3)
{
lv.SubItems.Add(rg.reminderLogSum.ToString(), Color.Empty, Color.Yellow, null);
}
else if (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();
}
}
...全文
1969 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-07-16
  • 打赏
  • 举报
回复
这种情况我就先不关心你的代码了,我们用第3方中立测试程序去测试。 如果说第3方中立代码也一样结果。那么提交你的测试报告让你的领导去想办法 如果第3方中立代码没问题,那么在过来问怎么解决你自己代码的问题。 ps:我们来一个实际情况,某现场程序员根据文档调试一个串口设备,调试3天都调试不通。而厂家自己的调试工具可以。双方各执一词都说对方有问题。我们说ok,先别说谁有问题,用第3方中立工具测试。测试结果双方都没有问题,问题是“厂家文档是错的,现场的实际协议和文档写的不一样”
datafansbj 2020-07-16
  • 打赏
  • 举报
回复
在网络上,不建议频繁建立连接,那样的话在网络会话中,连接的建立(TCP握手)、关闭会消耗大量时间。建议增加连接池,或一次性获取、更新批量数据。
在本机,网络连接走回环(loop),速度快得多且不受带宽限制。
八爻老骥 2020-07-15
  • 打赏
  • 举报
回复
远程访问数据库本来就慢,而且不赞成连接远程数据库,最好在中间加一层WebService,可以考虑用WCF来实现,WebService跟数据放一台服务器上或是同一个局域网。
xiaruiok 2020-07-15
  • 打赏
  • 举报
回复
引用 1 楼 耗子哭死猫 的回复:
你给这段代码 litRge = rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"), 1, qtid);//数据库查询出需要加载的数据 前后加个日志记录时间; 看看是不是数据库连接出现的问题,还有就是第一次加载都挺慢,30秒就有点不正常了。

Stopwatch watch = new Stopwatch(); //实例化一个监控对象
            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毫秒。
  • 打赏
  • 举报
回复
1,查询需要查询字段, 2.查询到的数据 ListView分页 显示 https://www.cnblogs.com/suntanyong88/p/5531482.html
耗子哭死猫 2020-07-15
  • 打赏
  • 举报
回复
你给这段代码 litRge = rgeM.getListArray_P(DateTime.Now.ToString("yyyy-MM-dd"), 1, qtid);//数据库查询出需要加载的数据 前后加个日志记录时间; 看看是不是数据库连接出现的问题,还有就是第一次加载都挺慢,30秒就有点不正常了。

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧