我已经创建了一个解决方案,它读取当前大小为20-30 mb的大型csv文件,我试图根据用户选择的某些列值删除重复的行运行时间使用寻找重复行的常用技术,但速度太慢,看起来程序根本无法工作。从大csv文件删除重复的记录C#.Net
什么其他的技术可以被应用到从CSV文件
这里删除重复记录的代码,绝对是我做错了什么
DataTable dtCSV = ReadCsv(file, columns); //columns is a list of string List column DataTable dt=RemoveDuplicateRecords(dtCSV, columns); private DataTable RemoveDuplicateRecords(DataTable dtCSV, List<string> columns) { DataView dv = dtCSV.DefaultView; string RowFilter=string.Empty; if(dt==null) dt = dv.ToTable().Clone(); DataRow row = dtCSV.Rows[0]; foreach (DataRow row in dtCSV.Rows) { try { RowFilter = string.Empty; foreach (string column in columns) { string col = column; RowFilter += "[" + col + "]" + "='" + row[col].ToString().Replace("'","''") + "' and "; } RowFilter = RowFilter.Substring(0, RowFilter.Length - 4); dv.RowFilter = RowFilter; DataRow dr = dt.NewRow(); bool result = RowExists(dt, RowFilter); if (!result) { dr.ItemArray = dv.ToTable().Rows[0].ItemArray; dt.Rows.Add(dr); } } catch (Exception ex) { } } return dt; }
20-30 MB太小,如果你正确地做的话会导致某些东西非常慢,所以我假设你不是。分享一些代码。 – Jon 2011-03-11 11:50:19
我看到你发现异常的事件有多少,他们可能是一个主要的放缓! – Peter 2011-03-11 12:02:24
实际上现在没有例外 – Sandhurst 2011-03-11 12:05:08