- PR -

インスタンスを作成中に例外が発生しました。というエラーについて

投稿者投稿内容
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 16:24
akuroです。

一度コメントアウトしてみましたが、同じエラーでした。

>デザイン時にもデータベースに接続しにいっちゃいますよ。
そうなんですか。。。
そのようにしたいと思います。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 16:25
>DB接続を行っております。

コンストラクタで?
うーん。
使うところでやるとかしたほうがいいと思われます。

デザイン時にもデータベースに接続しにいっちゃいますよ。

_________________
たつごろー
codeseek
こみゅぷらす
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 16:31
> デザイン時にもデータベースに接続しにいっちゃいますよ。
ごめんこれまちがい。
コントロールのときでした。

> 一度コメントアウトしてみましたが、同じエラーでした。

提示していただいた情報ではよくわからないんだけど、
これまでに1度くらいはうまくいっていた?

複雑な処理を入れる前に、まず、必要最低限のコードで動作を確認してはいかがでしょう。

私も同様のエラーを出したことがあるんで、思い出したら書きます。

_________________
たつごろー
codeseek
こみゅぷらす
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 16:55

>提示していただいた情報ではよくわからないんだけど、
>これまでに1度くらいはうまくいっていた?

いえ、一度もうまくいっておりませんでした。

>複雑な処理を入れる前に、まず、必要最低限のコードで動作を確認してはいかがでしょう。
単純に作成されたデフォルトのソースでも試してみましたが。
同様のエラーとなって市増しました。

>私も同様のエラーを出したことがあるんで、思い出したら書きます。
よろしくお願いいたします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 17:26
ためしに作ってみました。
私のやり方では問題なく動きました。

1、新規にASP.NET Webアプリケーションプロジェクトを作る
2、クラスClass1を追加する
3、Class1クラスの継承元をSystem.Web.UI.Pageにする
4、WebForm1.aspxの継承元をClass1にする

これでうまくいかないですか?

この手順とは違うことをしているようでしたら、その部分を書いてくだされば、なにかわかるかもしれません。

_________________
たつごろー
codeseek
こみゅぷらす
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 19:11
akuroです。

いま、Microsoftのサンプルをコピペして実行してみたところ、、、
何とか動作しました。

それから、色々と試してみたのですが、結局コンストラクタ、デストラクタ
をやめて別関数にして試してみたところ。エラーが発生しなくなりました。

結局、コンストラクタ、デストラクタが原因のようです。

現在のソリューション内で、1,2,3,4を実行してみたのですが、
最初はエラーになったのですが、ビルド等したところ、うまくいきました。
なにか、微妙な問題があるようです。
もう少し、見極めていきたいと思います。


色々とアドバイスしていただき、本当にありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-29 22:08
引用:

akuroさんの書き込み(2004-11-29 16:14)より:


 少なくとも、データベースの解放(Closeメソッドのコール)をデストラクタに入れるのはよくありません。デストラクタは、"いつ呼ばれるかわかりません"。Pageオブジェクトはページの処理ですから、開発者がこのオブジェクトの解放を指示することはできません。となると、デストラクタが呼ばれるのはシステムに依存します。
# C#で明示的にデストラクタを呼べましたっけ?(つまり、C++のdelete演算子相当)
したがって、完全にガベージコレクタ任せになります。これは、ページの実行が終わったからといってデストラクタが呼ばれるわけではない、という意味です。デストラクタでデータベースの解放を行うことは、この"狭い"意味に於いてリソースリークとなります。
 少なくとも、レンダリングするときには必要ないはずなので、Renderイベント、PreRenderイベント辺りでは閉じておくべきです。最良は、“使う直前に開いて、使った直後に閉じる”ですけど。接続はプールされますから、"アプリケーションを通じて開いておく"という使い方でないのなら、パフォーマンスは気にするほど落ちませんよ。


って、終わってるし
_________________
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-30 15:01
akuroです。
Jittaアドバイスありがとうございます。

デストラクタでのクローズ処理はやめようと思います。
接続のプールについて、まだ詳しいことは知らないので、

クローズするタイミング(Renderイベント)について調査してみようと思います。

ありがとうございました。

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