1

XML ファイルからデータを読み取っていますが、xml ファイルには 1,000 万行を超える行が含まれています。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# でできることよりもはるかに高速です。

編集:あなたができることは本当に何もありません。可能であれば、SQLite などの組み込み DBMS に切り替えることが最善の選択肢です。

于 2013-07-03T13:02:24.230 に答える
1

XML ファイルから読み取った行をデータベースの一時テーブルに挿入します。データベースがサポートしている場合は、一括コピーを使用してください。

次に、SELECT DISTINCT を使用して、一時テーブルからターゲット テーブルに転送します。

于 2013-07-07T22:34:12.383 に答える
1

1,000 万行のデータがあるため、データを保存するには、text/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 に答える