








周三拿到代码,没有看
准备先运行测试一下性能
手头上有一个电信发过来的文本文件,里面存着20几万条欠费用户数据(纳闷。。。为什么要用文本)
数据是逐行存放,即一行一条记录
web上实现的,就是通过导入这个文本,把用户数据导入一张表,然后根据这些数据,更新或插入另一张表
这里导入过程中还有一些涉及多表的约束行判断
ok,闲话少说,开始。。。。
噩梦开始。。。。。
。。。。。。。
。。。。。。。
从我开始导入开始,时间已经过去10分钟。。。30分钟。。。。2小时(中午吃饭时间,呵呵,上班时间会发疯的)
太夸张了吧?
查了下代码中是怎么处理的,
大致的思路如下:
通过StreamReader.Readline()先扫描文本,取出账号存入数组,然后遍历数组,插入数据库
大概的处理:
while(strLine!= null)
{
if(strLine.Trim().Length<=0)
{
strLine = sr.ReadLine();
continue;
}
all_user += "','"+strLine.Trim() + userPostfix;
strLine=sr.ReadLine();
}
for(int i=0; i<nameList.Length; i++)
{
判断是否在表1中,存在不插入
判断是否在表2中,存在不插入
判断是否在表3中,确定insert或update
生成sql;
}
执行sql;
两次几十万的循环,而且中间还有大量判断,并且和数据库交互,大致确定了瓶颈的存在,调试一下,发现瓶颈在于下面步骤
1、读取文本的过程,readline()应该比较慢
2、循环中大量判断,打断了cpu处理,而且交互数据库,效率降低得很厉害
找到问题所在,下面要做的就是想办法解决了
(待续)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。