質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DataSet

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1180閲覧

C#のDataSetにXMLを読み込ませる早い方法

Harigane

総合スコア16

DataSet

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/04/30 02:38

前提・実現したいこと

C#でDataSetにXMLファイルを読み込ませているのですが、
もう少し早くできないかと考えております。

 現在、2000行程度のデータ読み込みで、30秒かかっております。
BeginLoadDataとEndLoadDataを使用した場合を使用すると早くなるという
記事を見つけて試してみましたが、逆に遅くなりました。

 何か早くする方法があればアドバイスをください。

該当のソースコード

BeginLoadDataとEndLoadDataを使用しない場合

C#

1 public static void LoadData(this DataSet1 DS, string filename) 2 { 3 if (!File.Exists(filename)) return; 4 try 5 { 6 DS.Clear(); 7 DS.ReadXml(filename); //ここで30秒かかっている 8 return; 9 }catch(Exception) 10 { 11 Console.WriteLine("データのロードが例外で失敗しました。"); 12 return; 13 } 14 } 15

BeginLoadDataとEndLoadDataを使用した場合

C#

1 public static void LoadData(this DataSet1 DS, string filename) 2 { 3 if (!File.Exists(filename)) return; 4 try 5 { 6 foreach(DataTable dt in DS.Tables) 7 { 8 dt.BeginLoadData(); 9 } 10 DS.Clear(); 11 DS.ReadXml(filename); 12 return; 13 }catch(Exception) 14 { 15 Console.WriteLine("データのロードが例外で失敗しました。"); 16 return; 17 } 18 finally 19 { 20 foreach (DataTable dt in DS.Tables) 21 { 22 dt.EndLoadData(); //ここで50秒かかっている 23 } 24 } 25 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

BeginLoadData() はデータを非同期で読むので遅くなります。
早くなるという情報があるとすれば、それは読み込み時間が短縮されるということではなくユーザーの入力を早く受け付けられるようになるという意味だと思います。

ReadXml() はライブラリで定義されたメソッドです。
プロ中のプロが作っています。
これよりも早く処理しようと思うなら、一般的な方法では無理だと思います。
データの特徴を把握してそれに最適化する必要があります。

一つ考えられるとすれば、データバインディングを使用していてデータの読み込みと同期して何らかの処理が働いているのかもしれません。
その場合はデータの読み込み中はそれを抑制して読み込みが終わってから処理すると良いかもしれません。

投稿2018/04/30 03:49

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Harigane

2018/04/30 03:54

早速の回答と分かりやすい解説ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問