惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog

博客园 - ivanking

(转载)常用格式转换 smil教程(转载) Nhibernate之初体验(一) 构建安全的Web Service Getting start with nhibernate) CrystalReport开发常见错误总结 SQL Server日志文件的相关处理(转帖) 常用正则表达式收集 - ivanking - 博客园 Nov 2th 2005 Aug 13th 2005 Sep 5th 2005 ---- Sep 12th 2005 Aug 31th 2005 Aug 26th 2005 优化较大数据量的处理效率的收获(总结,疑问) 优化较大数据量的处理效率的收获(sql性能优化) 优化较大数据量的处理效率的收获(优化思路) 优化较大数据量的处理效率的收获(前言) 在域控制器上vs.net 2003无法调试的解决办法 几个js验证函数 - ivanking - 博客园
优化较大数据量的处理效率的收获(寻找瓶颈)
ivanking · 2005-08-05 · via 博客园 - ivanking

周三拿到代码,没有看

准备先运行测试一下性能

手头上有一个电信发过来的文本文件,里面存着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处理,而且交互数据库,效率降低得很厉害

找到问题所在,下面要做的就是想办法解决了

(待续)