2011-12-19 12 views
1

私はODBCドライバを使用しているアプリケーションを持っています。この小さなチュートリアルhttp://edn.embarcadero.com/article/25639に従うことで、多かれ少なかれビルドされます。DelphiアプリケーションとODBCドライバ - ベストプラクティス大量のデータをロードしてアプリケーションを終了する

私の質問は、データベースから約100KBのレコードをクエリで取得するように依頼しています。しかし、私が結果を得る前に、アプリケーションは閉じられます(私によって作られていないソフトウェア設計)。 ODBCドライバで何が起こっていますか?それは凍えるでしょうか?ドライバが使用するメモリが増えますか?この「潜在的な」問題が存在する場合、それをどのように管理すべきですか?

+0

私はちょうどそれを得ることはありません。+ 1、-1、-1 ..答えはありません。-1の理由はありません...あなたのdownvotingのための奇妙な方針です! – RBA

+0

あなたの質問は非常に曖昧なので、-1票を得ています。あなたが何を求めているのかははっきりしていません。実際には、あなたがしようとしていることや解決しようとしている問題は明確ではありません。正しく機能していないものと正確に何を求めているのかを説明するために、編集することができます。また、EDNのものであっても、外部サイトのコードへのリンクを投稿することは有用ではありません。なぜなら、人々は別の場所に移動してその問題の原因を突き止めたくないからです。あなたは編集中にそれを考慮したいかもしれません。 :) –

+0

ほとんどの回答は、特定のODBCドライバの技術的な詳細を読むことです。答えは実装固有のものになります。 –

答えて

2

あなたが尋ねている問題は、経験したことがある(凍結、メモリの増加)か、あなたが求めているものだけで、いずれの場合も、おそらくODBCドライバとデータベースに依存しているのでしょうか。大きな結果セットを取得してSQLFreeStmt(SQL_CLOSE)を呼び出すことの半分であれば、次に起こるのはODBCドライバとデータベースに依存します。一部のODBCドライバは同期プロトコルを使用してデータベースと通信し、ODBCドライバがデータベースにそれ以上の行を必要としないことを通知することはできません - 単に送信され、ODBCドライバは自分が何であるかを知らないため次に実行すると、そのデータをすべて読み込む必要がありますが、それを捨てる必要があります(特に、結果セットが大きい場合は一時停止と見なすことがあります)。一部の人は、行の送信を停止すると言うデータベースに何らかの信号を送ることができるかもしれません。

いずれにしても、アプリケーションが終了すると、メモリの使用はここやそこにありません。あなたのアプリが閉鎖されたときに試してみるのは良い習慣ですが、ドライバーが正しくクリアされていないシステムリソースをいくつか作成しない限り、それは本当に重要ではありません。

+0

私はこのようなことを経験していません。データがアプリケーションのメモリ空間に「移動」される前に、アプリケーションを終了すると何が起きているのかを知りたかっただけです。 – RBA

関連する問題