- - PR -
[ASP.NET]ASP.NET+oo4oでオラクルのセッションが切れない
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-05-30 22:10
いつも拝見しています。
ASP.NET(VB.NET) + oo4oでWebアプリを作成しています。 OracleへのアクセスやDBの操作は問題なくできるのです が、セッションがきれないのです。 ----------------------------- OraSession = 〜 OraDatabase = Orasession.〜 Try (中略) Catch exp As Exception OraDatabase = Nothing OraSession = Nothing Finally (中略) OraDatabase = Nothing OraSession = Nothing End try ------------------- 実際のコードは上記です。 みなさんは同じ現象おきていますでしょうか? (そもそもoo4oは使用していないのかな?) Dispose()を使用(または併用)していますでしょうか? ご教授ください。 |
|
投稿日時: 2003-05-31 00:38
oo4oは使用していませんが、コネクションプーリングが有効になっているとかでは?
oo4oのヘルプで「コネクションプーリング」「connection pooling」で調べてみると答えがあるかも。 |
|
投稿日時: 2003-06-02 10:52
こんにちは。
Nothingをしただけでは、メモリは解放されません。@ITの記事に『確実に解放するには』みたいなものがあったと思います。参考にしてください。この場合、nothingではなく、コネクションの切断を行う必要があります(+、ラフィンさんのプーリング設定)。 あと、Try〜catch〜finallyで、catch句とfinally句の両方でnothingされていますが、finally句は必ず実行されるので、catch句の方は不要です。 |
|
投稿日時: 2003-06-02 11:46
ラフィンさん、Jittaさんありがとうです。
コネクションプーリング調べたのですが英語ばっかりでまったく わかりませんでした。 VB6.0をしてった時はNothingでセッションが切れていたのに VB.NETではだめみたいです。 コネクションとセッションの適切な切り方を教えてください。 よろしくお願いします。 |
|
投稿日時: 2003-06-02 12:22
MarshalクラスのReleaseComObjectメソッドについて調べてみるとヒントが見つかるかもしれません。
|
|
投稿日時: 2003-06-02 14:42
役に立たないと思いますが、ODP.Netのコネクションプーリングの制御方法
★プーリングに制限を加える際はConnectStringで調整する。 Pooling=true/false コネクションプーリングの使用(デフォルト=true) Connection Lifetime プーリングの削除判断時間(デフォルト=0秒) Connection Timeout プーリングからの接続タイムアウト(デフォルト=15秒) Max Pool Size 最大プール数(デフォルト=100) Min Pool Size 最小プール数(デフォルト=1) Incr Pool Size プールが足りない場合の増分(デフォルト=5) Decr Pool Size プールが使われていない際の減少分(デフォルト=1) ※なお、セッションが切れないのとコネクションプーリングがセッションを確保しているのはイコールではありませんので... ODP.Netでコネクションに対してNothingをセットする前にCloseしています。 |
|
投稿日時: 2003-06-02 22:00
みなさんありがとうです。
imports System.Runtime.InteropServices OraSession = CreateObject(〜 OraDatabase = Orasession.〜 Try (中略) Catch exp As Exception OraDatabase = Nothing OraSession = Nothing 'ここでエラーページへ遷移 Finally (中略) Marshal.ReleaseComObject(OraDatabase) OraDatabase = Nothing Marshal.ReleaseComObject(OraSession) OraSession = Nothing でセッションが切断されたのを確認したのですが、 すべてではないようです。いくつかはセッションが 残ってしまいます。ラフィンさんのコネクション プーリングなのかこの方法では完全ではないのか 判断がなかなかつきかねています。 そもそもReleaseComObjectをしたあとにオブジェクト の解放をするのか?それともオブジェクトをクリエイト (インクリメントとも書いてました)をしないと いけないのか?はたまたSecurityPermissionでアクセス 許可を設定しないのいけないのか?? などなど奥がだんだん深まっています。 上記のコードで完全ではない理由はどこなのでしょうか。 ご教授ください。 |
|
投稿日時: 2003-06-03 00:35
oo4oのヘルプをパッっと見た感じでは、コネクションプーリングは明示的に定義しない限り有効にならないようにみえました。(断言しません)
奥が深まっているとお感じでしたら一旦浅くしてみてはいかがでしょう。 例えば OraSession = CreateObject(〜 OraDatabase = Orasession.〜 OraDatabase = Nothing OraSession = Nothing この4行だけをブレークポイントなんぞ設定せずに連続10回でも動かして見るとか。 (中略)いりませんしね。 |