【ASP.NET】DataSet.ReadXml()のパフォーマンス向上(巨大xmlファイルの読込高速化)

ADO.NETでxmlファイルを読み込み、DataSetに格納するには、DataSet.ReadXml()を使用すると便利だが、xmlファイルが巨大化すると、時としてかなりのパフォーマンス低下が生じる。
なんかいい方法はないかといろいろ調べていたら、msdnにまさにドンぴしゃりの記事を見つけたのでメモ。

[msdn]XML からの DataSet の読み込み

非常に大きなファイルを読み込む際に 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 メソッド
データを読み込んだ後、通知、インデックスの維持、および制約をオンにします。

コメントを残す

メールアドレスが公開されることはありません。

twelve − 8 =