黑马程序员技术交流社区
标题:
有关 File.ReadLines() 的问题
[打印本页]
作者:
白夜行
时间:
2014-3-10 21:16
标题:
有关 File.ReadLines() 的问题
本帖最后由 白夜行 于 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() 有什么执行效率上的不同?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2