私は、データベースと特に SQLite に関するさまざまなベスト プラクティスを読むことに時間を費やしてきました。読んでいるうちに、やってはいけないことをたくさんしていることがわかりました。これらの問題を修正しようとしたときに、ADO 実装で SQLite を使用することの詳細について考えると混乱しました。
私の混乱は、特に準備されたステートメントと接続プーリングに起因しています。
http://msdn.microsoft.com/en-us/library/ms971481.aspxを読んでいるときに、接続はトランザクションに対してのみ開く必要があることがわかりました。トランザクションが完了したら、接続を閉じる必要があります。なぜそうなのかははっきりとはわかりませんが、著者は私よりもよく知っているという仮定に基づいて作業を進めてきました。閉鎖されました。それは単にプールに戻されたことを意味します。
クエリと挿入を改善するために、準備済みステートメントの使用について読みました。SQLite では、準備されたステートメントは本当にパフォーマンスを向上させますか? とhttp://petesbloggerama.blogspot.com/2007/02/sqlite-adonet-prepared-statements.htmlの両方が、複数回実行されるクエリを実行するときに、準備されたステートメントが進むべき道であることを示しているようです。また、準備済みステートメントは接続に固有のものであり、接続が閉じられると準備済みステートメントが失われることも読みました。
私の混乱はこれです。接続を開いたり閉じたりしている場合 (これは、スレッド プールが原因で接続が閉じられていることを意味する場合とそうでない場合があります)、準備されたステートメントから実際にどれだけの使用が得られますか? 1000 個のオブジェクトがある場合、単一のトランザクションで保存する必要がある場合、準備済みステートメントが大いに役立つことは理解できます。ただし、接続を閉じると、最初のオブジェクトから生成された準備済みステートメントが失われるため、トランザクションに単一のオブジェクトを保存することでメリットが得られるとは思いません。これは本当の声明ですか?
私の混乱は、準備されたステートメントが私の SQLiteCommand オブジェクトのスコープにリンクされていると信じているという事実によって助長されています。
頻繁に実行するクエリを表す SQLiteCommand を作成する場合、準備されたステートメントがアクティブな状態を維持するために、その SQLiteCommand をメモリに保持する必要がありますか?
同じ SQLite ステートメントで新しい SQLiteCommand を作成した場合、新しい SQLiteCommand は以前のものと同じであり、使用できる準備済みステートメントがあると認識されますか?
SQLiteCommand をメモリに保持し、さまざまなトランザクションの接続を開いたり閉じたりするときにそのパラメーターと接続を変更すると、基本的に、異なる接続間で準備済みステートメントを維持できますか?
この時点で考えすぎている可能性が高いですが、これらの相互作用をよりよく理解して、それらを最大限に活用できるようにしてください.