本帖最后由 白夜行 于 2014-3-12 10:46 编辑
今天在练习将手机归属地数据插入数据库的时,我先用File.ReadLines()读文件数据:
- IEnumerable<string> lines = File.ReadLines(txt_FilePath.Text,Encoding.Default); //其中txt_FilePath在之前已经得到
复制代码
然后用一个 for 循环把 lines 的数据放到已创建的 DataTable table = new DataTable(); 里,下面是for语句
- for(int i = 1; i < lines.Count(); i++) //将读取的文件放到table中,不读第0行
- {
- string line = lines.ElementAt(i);
- string[] str = line.Split('\t');
- DataRow row = table.NewRow();
- row["telStart"] = str[0];
- row["telArea"] = str[1].Trim('"');
- row["telType"] = str[2].Trim('"');
- row["areaCode"] = str[3].Trim('"');
- table.Rows.Add(row)
- }
复制代码 最后用 SqlBulkCopy 将 table 写入数据库,因为数据一共有二十多万行,成功运行后比较卡,几分钟后我暂停后发现才读取了3万行左右,
虽然比之前用 SqlConnection 的速度快点,但还得三十分钟左右才能全部处理完,之后发现老师在读文件时用 ToArray() 方法直接转为String数组,如下:
- string[] lines = File.ReadLines(txt_FilePath.Text,Encoding.Default).ToArray();
复制代码 然后在 for 语句里直接用这个数组
- for(int i = 1; i < lines.Length; i++)
- {
- string[] str = lines[i].Split('\t');
- DataRow row = table.NewRow();
- row["telStart"] = str[0];
- row["telArea"] = str[1].Trim('"');
- row["telType"] = str[2].Trim('"');
- row["areaCode"] = str[3].Trim('"');
- table.Rows.Add(row);
- }
复制代码 这样执行后不到一分钟就把所有的数据插入到了数据库,为什么消耗的时间差别会那么大? 用FileReadLines()和FileReadLines().ToArray() 有什么执行效率上的不同?
|
|