- PR -

[ASP.NET] GC.Collectの多用

投稿者投稿内容
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-27 15:32
だめだこりゃPart3
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-27 15:45
引用:

遅延バインディングは運用時は用いない方が良いのでしょうか。


運用時というか開発時かな。
遅延バインディングが必要ないなら、切っとくべきでしたね。まぁ今更遅いので置いときましょう(全部修正していける余力があるのなら別ですが)。

oo4oは全く知らないので何ともわかりませんが。
遅延バインディングの箇所で例外が発生しているようなので、やはり、かるあさんが仰っているように
コード:

OraDatabase = Application("OraSession").GetDatabaseFromPool(lngFromPool)


で、Application("OraSession") が null 参照のタイミングがあるのでしょう。(どうです?みなさん)

lOraDatabase にインスタンスを割り当ててないように見えますが、それはコードが隠れているだけでしょうか。まぁここは今は関係ないですね。

_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-07-27 15:46 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-27 15:54
コード:
If Application("OraSession") Is Nothing Then
	Throw new ApplicationException("やっぱOraSesssionねぇじゃん!")
End If


原因が分からないようでしたらとりあえずこれで様子を見てはどうでしょう。

自分自身(この場合LoginPage)が全管理できない場所からのダウンキャストは必ずチェックしないといけませんよ。
必ず入っているという保証はないのですから。
_________________
囚人のジレンマな日々
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-07-27 17:15
引用:

囚人さんの書き込み (2006-07-27 15:45) より:
oo4oは全く知らないので何ともわかりませんが。
遅延バインディングの箇所で例外が発生しているようなので、やはり、かるあさんが仰っているように
コード:
OraDatabase = Application("OraSession").GetDatabaseFromPool(lngFromPool) 


で、Application("OraSession") が null 参照のタイミングがあるのでしょう。(どうです?みなさん)


私もoo4oに関しては知りませんが、少なくとも出てきた処理でこれはないでしょう。
※チェックを入れてみること自体にはもちろん反対しませんが。

っていうかApplication_Startイベントがきちんとただ一回、
最初のリクエストでのみ、他のリクエストの処理開始前に実行完了する
なんてことが保証されてなかったらびっくりしますが…
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-27 19:52
引用:

私もoo4oに関しては知りませんが、少なくとも出てきた処理でこれはないでしょう。


あれ?そうでしたか。
例外時のスタックトレースが遅延バインディング絡みで、出てきたコードで遅延バインディング絡みはここぐらいかなと思ったのですが。

「これはないでしょう」の理由を聞かせももらえますか?
_________________
囚人のジレンマな日々
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-27 20:03
引用:

なちゃさんの書き込み (2006-07-27 17:15) より:

っていうかApplication_Startイベントがきちんとただ一回、
最初のリクエストでのみ、他のリクエストの処理開始前に実行完了する
なんてことが保証されてなかったらびっくりしますが…


ココがそうかは解りませんが、
Application_Start は最初に一回しか実行されないとしても、
Application("OraSession")が NULL にならない理由にはなりませんよね。

#シングルトンあたりでやってあげたほうが良かったのかな

#うぅ、すみません、投稿する前にしっかり見直さないから修正が多くなる。。。

[ メッセージ編集済み 編集者: かるあ 編集日時 2006-07-27 20:05 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-07-27 20:11
引用:

かるあさんの書き込み (2006-07-27 20:03) より:
引用:

なちゃさんの書き込み (2006-07-27 17:15) より:

っていうかApplication_Startイベントがきちんとただ一回、
最初のリクエストでのみ、他のリクエストの処理開始前に実行完了する
なんてことが保証されてなかったらびっくりしますが…


ココがそうかは解りませんが、
Application_Start は最初に一回しか実行されないとしても、
Application("OraSession")が NULL にならない理由にはなりませんよね。


どういう状況を想定していますか?

Application変数がNullになる可能性としては、
1.Application_Startの初期化処理自体で失敗
2.誰かが勝手に消した
辺りが考えられますが、まず、エラーが散発的に発生しているということから、
根本的な初期化失敗ではないと思われるのでおそらく1.ではないでしょう。
また、2.の可能性は確かにないとはいえないので、NULLチェックをとりあえず
入れてみることには反対していません。

ただし、なんんとなく「Application("OraSession")がNULL」ではないんじゃない
かなとは思っています。

また、かるあさんは、
「Application("OraSession").CreateDatabasePool() が同時に複数から呼び出されたら
どうなるのかなーと思いました。」
とおっしゃっているので、複数同時に呼び出されたからNULLというのは
あてはまらないだろう、という意図もありました。

--追記
>とおっしゃっているので、複数同時に呼び出されたからNULLというのは
>あてはまらないだろう、という意図もありました。
これは、複数同時に呼び出されるということがそもそもありえないだろう、
ということです。

--さらに追記
すみません、結局もともといいたかったことというのは、
Application_Startが複数同時に呼び出されるとか、
Application_Startが正しく実行されない可能性がある(ユーザコードが
原因ではない状況で)、などと言っているように見えたので、
そんなことはないんでは?といいたかったわけです。
※本来疑わなくていい「部分あるいは状況」を疑ってても仕方がないのと、
 間違った認識が派生していきそうだったからです。


[ メッセージ編集済み 編集者: なちゃ 編集日時 2006-07-27 20:19 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-27 20:45
引用:

なちゃさんの書き込み (2006-07-27 20:11) より:

Application変数がNullになる可能性としては、
1.Application_Startの初期化処理自体で失敗
2.誰かが勝手に消した
辺りが考えられますが、まず、エラーが散発的に発生しているということから、
根本的な初期化失敗ではないと思われるのでおそらく1.ではないでしょう。
また、2.の可能性は確かにないとはいえないので、NULLチェックをとりあえず
入れてみることには反対していません。

ただし、なんんとなく「Application("OraSession")がNULL」ではないんじゃない
かなとは思っています。


そうですね、僕も示されたコードであるとすれば2の 誰かが勝手に消した
が可能性としてありえるかな、と思って書きました。

引用:

「Application("OraSession").CreateDatabasePool() が同時に複数から呼び出されたら
どうなるのかなーと思いました。」
とおっしゃっているので、複数同時に呼び出されたからNULLというのは
あてはまらないだろう、という意図もありました。


すいません、言葉が足りていませんでした。
Application("OraSession")が NULL かどうかは別として、
複数から同時アクセスされるようなオブジェクトに対して、
内部の情報が書き換わりそうなメソッドをいきなり呼び出しても大丈夫なのかな?
と思い書きました。

引用:

これは、複数同時に呼び出されるということがそもそもありえないだろう、
ということです。


そうですか?複数人が同時に検索使用とした場合
ありえそうに思えるんですけれど・・・

引用:

結局もともといいたかったことというのは、
Application_Startが複数同時に呼び出されるとか、
Application_Startが正しく実行されない可能性がある(ユーザコードが
原因ではない状況で)、などと言っているように見えたので、
そんなことはないんでは?といいたかったわけです。
※本来疑わなくていい「部分あるいは状況」を疑ってても仕方がないのと、
 間違った認識が派生していきそうだったからです。


そうですね、僕もそう思います。
もう少し詳細なコードと状況がほしいですね。

スキルアップ/キャリアアップ(JOB@IT)