我正在从XML文件中读取数据,而我的xml文件包含超过1000万行。 我的XML文件包含重复的行。我希望从xml中区分出行并将其插入数据库。
我试过用:
string myXMLfile = System.Configuration.ConfigurationSettings.AppSettings.Get("ReadFilePath").ToString();
System.IO.FileStream fsReadXml = new System.IO.FileStream(myXMLfile, System.IO.FileMode.Open);
DataSet dsFileRecords = new DataSet();
dsFileRecords.ReadXml(fsReadXml);
DataTable dtUniqRecords = dt.DefaultView.ToTable(true, "ID","Name");
System.IO.FileStream fsReadXml = new System.IO.FileStream(myXMLfile, System.IO.FileMode.Open);
DataSet dsFileRecords = new DataSet();
dsFileRecords.ReadXml(fsReadXml);
DataTable dtUniqRecords = dt.DefaultView.ToTable(true, "ID","Name");
但这种方法需要很多时间。获取不同行的任何其他方法?
答案 0 :(得分:3)
如果数据库是基于SQL的,则可以使用SELECT DISTINCT
。这将比你在c#中做的任何事情都快得多。
答案 1 :(得分:1)
将从XML文件读取的行插入数据库中的临时表。如果您的数据库支持批量复制,请使用批量复制。
然后使用SELECT DISTINCT从临时表转移到目标表。
答案 2 :(得分:1)
拥有1000万行数据,您需要使用数据库而不是text / xml文件来存储数据。我担心你没有太多办法可以加快一个过程,这个过程取决于读取整个文件,然后立即读入内存然后进行扫描。最好重新考虑您的架构。
我会先将所有行放入数据库,如果只是一个临时表,然后在那里重复删除并插入到最终表中;使用真实数据库提高性能的更多机会。
答案 3 :(得分:0)
SQL语句将是最快的路径。类似的东西:
USE database_name;
GO
SELECT DISTINCT column_name
FROM table_name