3

MySqlDataReader (または IDataReader 一般) の癖を理解したいと思います。インターネットで調査しているときに、MySqlDataReader の使用方法に関する多くのリソースを見つけましたが、舞台裏で何が起こっているかについてはほとんどありません。私が実行したベンチマークで、実行に必要な時間がMySqlCommand.ExecuteReader()ですべてのデータセットを読み取るよりも桁違いに小さいことがわかったため、質問していMySqlDataReader.Reader()ます。これは、特に大規模なデータ セットに当てはまります。例を挙げると、クエリの実行に 80 ~ 100 ミリ秒、すべてのデータの読み取りに約 15 秒かかる ~740000 行を読み取っています。もう 1 つの例は、すべてのデータを読み取るのに約 200 ミリ秒と約 1 秒のクエリ時間で約 2200 行を読み取ることです。

High Performance MySQLによると、取得したデータは一般的なコネクタ (第 3 版、p. 212) にバッファリングされており、これはConnector/Netにも当てはまると思います。740000 行の場合、すべてのデータをバッファリングできるわけではない、またはバッファリングする必要があるとは限りませんが、2 番目の例では 2200 行を簡単にバッファリングできるはずです (5 ~ 7 列を超えないように要求しています)。

データベースから読み取らずに同等の量のデータ構造を作成するのにかかる時間は 1 ミリ秒未満 (System.Diagnostics.Stopwatch で測定) であるため、これはボトルネックではありません。データがバッファリングされている場合、リーダーからの読み取りになぜそれほど時間がかかるのか疑問に思っています。

4

1 に答える 1