ListPage

2010年8月9日月曜日

DataSetにXMLを取り込む

DataSetにXMLを取り込む

XMLを取得


DataSetにXMLファイルを読込んで使う事なんて滅多に業務的に無い為メモ


VB.NET

Using ds As DataSet = New DataSet
 Dim dt As DataTable = New DataTable(tabelname)
        Dim xmlSR As System.IO.StreamReader _
         = New System.IO.StreamReader(filepath & xmlName)

        For Each dt In ds.Tables
         dt.BeginLoadData()
        Next

        ds.ReadXml(xmlSR)
        dt = ds.Tables(0)

        For Each dt In ds.Tables
         dt.EndLoadData()
        Next

End Using

C#

using (DataSet ds = new DataSet()) {
 DataTable dt = new DataTable(tabelname);
 System.IO.StreamReader xmlSR = new System.IO.StreamReader(filepath + xmlName);

 foreach ( dt in ds.Tables) {
  dt.BeginLoadData();
 }

 ds.ReadXml(xmlSR);
 dt = ds.Tables(0);

 foreach ( dt in ds.Tables) {
  dt.EndLoadData();
 }

}

DataSet ビジュアライザで確認

実際に確認してみたらいい感じ。

非常に大きなファイルを読み込む際に ReadXml を呼び出すと、パフォーマンスが低下することがあります。大きなファイルを読み込む場合に、ReadXml のパフォーマンスを最大にするには、DataSet のテーブルごとに BeginLoadData メソッドを呼び出し、その後で ReadXml を呼び出します。最後に、次の例に示すように、DataSet のテーブルごとに EndLoadData を呼び出します。


どんくらいの大量のデータやねんってことで調べた。

とりあえず1000件のデータを作成しstopwatchクラスで時間計測!

BeginLoadData EndLoadData有り Time is : 00:00:00.0227109 はえー・・。
BeginLoadData EndLoadData無し Time is : 00:00:00.0192091 あるぇー・・。

データがたりんのね。

10000件
BeginLoadData EndLoadData有り Time is : 00:00:00.1380896 ?
BeginLoadData EndLoadData無し Time is : 00:00:00.1264850 ?

100000件
BeginLoadData EndLoadData有り Time is : 00:00:01.3964389 ?
BeginLoadData EndLoadData無し Time is : 00:00:01.7707770 ?

び・・微妙な差が・・・。

1000000件 私のエディタの限界。
BeginLoadData EndLoadData有り Time is : 00:00:14.5700241
BeginLoadData EndLoadData無し Time is : 00:00:14.7292566

・・・・あれ・・?

・・・・・・・・


MA SA KA!!!

0 件のコメント:

コメントを投稿