1

我正在从 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");

// Insert rows to database from Datatable(dtUniqRecords)

但是这种方法需要很多时间。还有其他方法可以获得不同的行吗?

4

4 回答 4

3

如果数据库是基于 SQL 的,您可以使用SELECT DISTINCT. 这将比您在 c# 中所做的任何事情都要快得多。

编辑:你真的无能为力。如果可行的话,切换到嵌入式 DBMS(例如 SQLite)是您的最佳选择。

于 2013-07-03T13:02:24.230 回答
1

将从 XML 文件读取的行插入到数据库中的临时表中。如果您的数据库支持,请使用批量复制。

然后使用 SELECT DISTINCT 从临时表转移到目标表。

于 2013-07-07T22:34:12.383 回答
1

对于 1000 万行数据,您需要使用数据库而不是文本/xml 文件来存储数据。恐怕您无法加快一个依赖于将整个文件读取到内存中然后扫描的过程的速度。最好重新考虑您的架构。

如果只是一个临时表,我会首先将所有行放入数据库中,然后在那里对其进行重复数据删除并插入到最终表中;使用真实数据库提高性能的更多机会。

于 2013-07-07T22:34:37.213 回答
0

SQL 语句将是最快的路径。就像是:

USE database_name;
GO
SELECT DISTINCT column_name
FROM table_name
于 2013-07-03T13:07:25.600 回答