2017-06-27 14 views
2

私は動的ダッシュボードを持っており、3秒ごとにoracleからc#winformsへの20の問合せを取得します。Oracle Connections from c#

現在、以下のように使用しています。

OracleConnection con = new OracleConnection(oradb); 
con.Open(); 
OracleCommand cmd1 = new OracleCommand(getSystime, con); 
OracleDataReader dr1 = cmd1.ExecuteReader(); 
dr1.Read(); 
. 
. 
. 
. 
. 
. 
OracleCommand cmd15 = new OracleCommand(getSqltime, con); 
OracleDataReader dr15 = cmd15.ExecuteReader(); 
dr15.Read(); 

con.Dispose(); 
con.Close(); 

現在、私がチェックすると、アプリケーションには9つの非アクティブセッションがあり、約100個のオープンカーソルがあります。数字は増えていません。私が1時間後にチェックしても、私のアプリケーションからは9つのアクティブ/非アクティブとほぼ100のopen_cursorがあります。

これは私の最初のアプリケーションなので、私はそれについての経験はありません。

私はそれをどのように解釈できますか?

+0

を実装してそしてusing {}ことによってそれを囲む私は、OracleCommandは、uはusingステートメントでコードをラップして、uはそれはそれは –

+0

@WernfriedDomscheitを終えた後でし配置されることを確認しますIDisposableインターフェイスを実装して推測します私の上記のコードを使って答えを書いてください。私はそれを受け入れることができます –

答えて

3

コンテンツを読んだ後は、常にClose()OracleDataReaderにする必要があります。それはIDisposable

using (OracleConnection con = new OracleConnection(oradb)) { 
    con.Open(); 
    OracleCommand cmd1 = new OracleCommand(getSystime, con); 
    using (OracleDataReader dr1 = cmd1.ExecuteReader()) { 
     dr1.Read(); 
     ... 
     dr1.Close(); 
    } 
} 
0

ない私はあなたの質問を理解しておくが、 代わり

OracleDataReaderの

OracleDataAdapterの

を使用してみてください私の理解では、DataReaderオブジェクトがデータアダプターよりも高速ですが、DataReaderが接続モードで動作します。 DataAdapter/DataSetは切断モードで動作します。

これは、一定の時間が経過してもクエリが表示されない原因となる可能性があります。