1

複数のcsvファイルを読み込んでマージする必要があります。マージされたデータは、チャートの生成に使用されます (.NET チャート コントロールを使用)。

これまでのところ、単純なストリームリーダーでこれを行い、すべてを 1 つの DataTable に追加しました。

while (sr.Peek() > -1)
{
  strLine = sr.ReadLine();
  strLine = strLine.TrimEnd(';');
  strArray = strLine.Split(delimiter);
  dataTableMergedData.Rows.Add(strArray);
}

しかし、ログファイルが変更される可能性があるという問題があります。ここでわかるように、新しいログファイルには追加の列があります。ログファイルのスキーマ

私の現在の手順は現在機能していません。これを行う方法についてアドバイスを求めています。各ログファイルには約 1500 行、最大 100 列が含まれ、ログファイルは最大 1 年間 (365 ファイルに相当) マージされるため、パフォーマンスは重要です。

私はそのようにします:最後にすべてのデータを含むDataTableを作成し、各ログファイルを個別のDataTableに読み込みます。各読み取り操作の後、別の DataTable を「大きな」DataTable に追加し、列が変更されたかどうかを確認し、変更された場合は新しい列を追加します。

しかし、DataTables を使用するとパフォーマンスに影響するのではないかと心配しています。

注: 私は winforms でこれを行っていますが、とにかく問題ではないと思います。

編集: CsvReaderを試しましたが、これは現在のソリューションよりも約 4 倍遅いです。

4

1 に答える 1

1

何時間ものテストの後、私は質問で説明した方法でそれを行いました:

最初にDataTable、最後にすべてのデータを含める必要がある を作成しました。次に、すべてのログ ファイルを foreach ループで処理し、ログ ファイルごとに別のログ ファイルを作成DataTableして、ログ ファイルの csv データを入力します。このテーブルは最初に追加され、DataTable列が異なっていても適切に追加されます。

これは、単純な に比べてパフォーマンスが低下する可能性がありますStreamReaderが、LumenWorks CsvReader よりも拡張が容易であり、それでも高速です。

于 2013-09-11T05:18:19.060 に答える