0

SqlConnections は、非アクティブ状態が一定時間続くと閉じているようです。接続が開いている時間を制御できる必要があります。接続用に構成できる「接続タイムアウト」および「接続ライフタイム」プロパティがありますが、必要な機能がありません。

問題は、アプリケーションが巨大で、多くの場所でいくつかの画面が開いているときに接続が閉じられないことです。ユーザーは画面を開いて昼食に行き、戻ってきて何かをしようとすると、「接続が失われました」という例外が発生する可能性があります。これがアンチパターンであることはわかっていますが、今のところ、接続の有効期間を 1 か所で延長してから、数千の場所で接続を開いたり閉じたり、プールしたりする方が簡単です。

4

3 に答える 3

0

接続は自動的に閉じません。ネットワークのように、何かが失敗しました。

しかし、それは予想されることです。接続を開いたままにしないでください!あなたはシステムがどのように使用されることを意図されていたかに反対して働いており、あなたはそれに苦しむでしょう。

作業単位ごとに1つの接続を使用するようにアプリを変更し、アプリを閉じます。バンドエイドの修正として、クエリを実行する前にそれSqlConnection.Stateが行われていることを確認してください。Open

于 2012-09-30T18:41:16.990 に答える
0

アプリの設計が非常に間違っています。接続は、単一の一連のクエリ (つまり、単一の操作に必要なクエリ) より長く開いたままにしないでください。SqlConnection は接続文字列に基づいて接続を内部的にプールするため、パフォーマンスの問題はありません。そのため、接続を開いたり閉じたりしても、REAL 接続は一定期間開いたままになります。

さらに、内部的に接続が閉じられている場合、プーラーは必要に応じて接続を再開するため、心配する必要はありません。

真剣に、接続を使用するときに接続を開いたり閉じたりするだけです。それが機能するはずです。

FYI, the reason the connections are closed is that the internal connection pooler will "reclaim" connections that have been open for a long time. So what you're doing by keeping the connections open is fighting the connection pooler.

于 2012-09-30T18:22:37.353 に答える
-1

接続を長時間開くのは適切なプログラミングではありません。必要に応じて接続を開き、データベース タスクの完了後に閉じます。アプリケーションのパフォーマンスに影響を与えると思われる場合は、接続プールを使用してください

于 2012-10-01T06:30:49.167 に答える