A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白夜行 中级黑马   /  2014-3-10 21:16  /  771 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 白夜行 于 2014-3-12 10:46 编辑

今天在练习将手机归属地数据插入数据库的时,我先用File.ReadLines()读文件数据:

  1. IEnumerable<string> lines = File.ReadLines(txt_FilePath.Text,Encoding.Default);    //其中txt_FilePath在之前已经得到
复制代码

然后用一个 for 循环把 lines 的数据放到已创建的 DataTable table = new DataTable(); 里,下面是for语句

  1. for(int i = 1; i < lines.Count(); i++)        //将读取的文件放到table中,不读第0行
  2.             {
  3.                 string line = lines.ElementAt(i);
  4.                 string[] str = line.Split('\t');

  5.                 DataRow row = table.NewRow();
  6.                 row["telStart"] = str[0];
  7.                 row["telArea"] = str[1].Trim('"');
  8.                 row["telType"] = str[2].Trim('"');
  9.                 row["areaCode"] = str[3].Trim('"');

  10.                 table.Rows.Add(row)
  11.             }
复制代码
最后用 SqlBulkCopy 将 table 写入数据库,因为数据一共有二十多万行,成功运行后比较卡,几分钟后我暂停后发现才读取了3万行左右,
虽然比之前用 SqlConnection 的速度快点,但还得三十分钟左右才能全部处理完,之后发现老师在读文件时用 ToArray() 方法直接转为String数组,如下:

  1. string[] lines = File.ReadLines(txt_FilePath.Text,Encoding.Default).ToArray();
复制代码
然后在 for 语句里直接用这个数组
  1. for(int i = 1; i < lines.Length; i++)
  2.             {
  3.                 string[] str = lines[i].Split('\t');

  4.                 DataRow row = table.NewRow();
  5.                 row["telStart"] = str[0];
  6.                 row["telArea"] = str[1].Trim('"');
  7.                 row["telType"] = str[2].Trim('"');
  8.                 row["areaCode"] = str[3].Trim('"');

  9.                 table.Rows.Add(row);

  10.             }
复制代码
这样执行后不到一分钟就把所有的数据插入到了数据库,为什么消耗的时间差别会那么大? 用FileReadLines()和FileReadLines().ToArray() 有什么执行效率上的不同?



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马