2016-04-15 32 views
-1

私は、データベースからのいくつかのデータ(データベース、挿入、ビュー、ソート、行ベースの計算などのすべての可能な操作)を処理する大きな.Netアプリケーションを作成しようとしています。DataReaderと比較してDataSetが本当に遅いですか?

私はADOの専門家ではなく、私のアーキテクチャが最適であることを確認したいと思います。だから、私はDataSetとDataReaderを比較して、どちらが使用されているかを知ろうとしています。

私はOracleにダミーテーブルを作成し、2 000 000のレコードで埋めました。クエリを使用してテーブルのサイズを確認するとき:

select * from dba_segments where Owner = 'TESTUSER' 

このテーブルには100 MBのようなものがあります。

MSDNでDataSetがテーブルに関するすべての情報を読み込むのに対し、DataReaderは高速な前向きの読み取りツールです。私がしようとしている

はそれぞれの限界をテストするので、私は次のコードを書いた:

SQL = "Select * from HugeTable" 
Command = New OracleCommand(SQL, Me.Connection) 
TempDataAdapter = New OracleDataAdapter(Command) 
TempDataAdapter.FillSchema(DataSet, SchemaType.Source, FullTableName) 
TempDataAdapter.Fill(DataSet, FullTableName) 

私の理解が正しければ、私は、データベースから100メガバイトを読み込むために、最後の行をexepectingよ(データベースは同じコンピュータにあります)しかし、私はこのコードを実行すると瞬時に実行されます(数百秒で実行され、理由はわかりません)

何かありますか私は行方不明ですか?

+0

なぜdownvotingですか?質問に何が間違っていますか? –

+1

私のdownvoteではないが、これについて考える:DataAdapterがDataSetを埋めるために使用すると思われることは何ですか? – Steve

+0

申し訳ありません。私はあなたの質問を理解していませんでした –

答えて

0

それはあなたが何をしているかによって異なります。データセットはクエリ結果の内容全体をメモリにロードしますが、これは特定の状況下で必要なものである可能性があります。

DataReaderは、データを読み取るときにデータを入力する「消防ホース」です。メモリは効率的ですが、転送専用です。 (データセットはデータウェアハウスから設定されています!)

だから私はあなたがデータをどのように読んでいくのかを決定するために何をするべきかにもっと焦点を当てるべきだと思います。

+0

ありがとうございます。実際には、私はMicrosoftがその文書に述べたことを確認しようとしていない。私は1つのソリューションから別のソリューションに切り替えるためにスピード損失の限界をチェックしようとしています...具体的には、私のテーブルのいくつかはx行とおそらく1000倍xを含みます。だから私は速度の損失がこの解決方法を選択するかどうかを確認するために重要であるかどうかを知りたいと思っています。 –

+0

さらにスピードについて考える必要があります - メモリ消費量も大きな問題です。一度に100MBのメモリを必要としない場合は、しないでください。特に、マルチリクエスト環境(Webサーバのような)では、同時に実行されるこれらのうちのいくつかは、それほど多くのメモリを消費してしまいます。 – n8wrl

+0

はい、正確に速度 - メモリです。そして私は、それぞれの限界をテストする方法を模索しています。私たちのような一般的な答えではありません。DataReaderは高速ですので、DataReaderを使用してください。 –

関連する問題