ADO.NETでxmlファイルを読み込み、DataSetに格納するには、DataSet.ReadXml()を使用すると便利だが、xmlファイルが巨大化すると、時としてかなりのパフォーマンス低下が生じる。
なんかいい方法はないかといろいろ調べていたら、msdnにまさにドンぴしゃりの記事を見つけたのでメモ。
非常に大きなファイルを読み込む際に ReadXml を呼び出すと、パフォーマンスが低下することがあります。大きなファイルを読み込む場合に、ReadXml のパフォーマンスを最大にするには、DataSet のテーブルごとに BeginLoadData メソッドを呼び出し、その後で ReadXml を呼び出します。最後に、次の例に示すように、DataSet のテーブルごとに EndLoadData を呼び出します。
以下の様に、DataSet.ReadXmlの前後で、BeginLoadDataメソッドとEndLoadDataメソッドを使用して処理する。
foreach (DataTable dataTable in dataSet.Tables) dataTable.BeginLoadData(); dataSet.ReadXml("file.xml"); foreach (DataTable dataTable in dataSet.Tables) dataTable.EndLoadData();
これでかなり大きなxmlファイルを使用するのでもものすごくパフォーマンスが向上し、読込速度が数段上がった。
BeginLoadData メソッド、EndLoadData メソッドは以下のような関数である。
DataTable.BeginLoadData メソッド
データを読み込む間、通知、インデックスの維持、および制約をオフにします。DataTable.EndLoadData メソッド
データを読み込んだ後、通知、インデックスの維持、および制約をオンにします。