我必须解析大约40,000个字符串并加载到DataTable中,它正在永远地解析字符串并加载。任何人都可以建议我采用更快的方法吗?
//sameple string
00001000200|something|something|999999999999|999999999999
var loadNdcs = new List<string>();
DataTable table=new DataTable();
table.BeginLoadData();
foreach (string line in lines)
{
string[] vals = line.Split(new[] { "|" }, StringSplitOptions.None);
if (!loadNdcs.Contains(vals[0]))
{
if (vals[3] == "99999999")
vals[3] = null;
if (vals[4] == "99999999")
vals[4] = null;
table.LoadDataRow(vals, true);
loadNdcs.Add(vals[0]);
}
}
table.EndLoadData();
答案 0 :(得分:2)
一个优化是使用带有O(1)查找的HashSet
而不是列表。
var loadNdcs = new HashSet<string>();
...
if (loadNdcs.Add(vals[0]))
{
...
}
如果不需要,您可能还希望使用table.Rows.Add(vals)
代替table.LoadDataRow(vals, true)
来避免不必要的更新。另外,如果您有table.EndLoadData()
,则可能需要table.BeginLoadData()
答案 1 :(得分:0)
如果数据来自文件,我不会加载整个文件,而是使用System.IO.StringReader
并致电ReadLine()
。
会更快吗?也许。它会用更少的内存吗?肯定。