- - PR -
Webアプリケーション実行時のサーバ変数の持ち方について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-31 09:52
いつも勉強させていただいております。
抽象的な話で申し訳ないのですが、現在ASP.NETの Webアプリを開発しておりますが、クラインアント がページにアクセスする際の変数の持ち方について 質問があります。 クライアント毎に異なる情報をDBから取得したデータ をA.aspxと表示しようとします。 その際に、DBからデータを取得し、整形するクラスファイルを 別途B.classとしこの中に配列も宣言しておきます。 そして、A.aspxにおいて、B.配列名をコントロールに バインドして表示します。 ここで疑問なのですが、共通クラスB.classに配列を もたせても良いものなのでしょうか? A.aspxでは描画処理時に呼び出すだけなのですが、 多数のクラインアントがアクセスした際に、配列の 値があるタイミングで変わったりするものでしょうか? また、このような現象を回避する為にはA.aspx内に 配列を宣言し、処理するべきなのでしょうか? 非常に素人のような質問で申し訳ないのですが、Web アプリは予想外のことが多くて困ってます。 質問も、めちゃくちゃで申し訳ありませんが、何か ご存知の方いらっしゃいましたら、ご教授よろしく お願いします。 | ||||||||||||
|
投稿日時: 2004-05-31 10:10
共通なBクラスの位置づけが良く分かりませんが……。
もしも、Bクラスに保持する配列がstaticな定義だとしたら、当然変わります。 それとも、Bクラスに配列を格納(static定義でないもの)し、そのBクラス自体をSessionとかに入れるなら、変わらないでしょう。
な目的ですから、
Sessionとかを使っていないとしたら、良くないでしょう。不可能とまでは言いませんが……。 Sessionとかの状態管理を使うべきだと思います。 「Webアプリケーションの状態管理」の、「表1 状態管理のいくつかの方法」を参照してください。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-05-31 10:22 ] [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-05-31 10:24 ] | ||||||||||||
|
投稿日時: 2004-05-31 10:34
一応補足です。
その場で読み出すデータであれば、その場でインスタンスを作ればそれでよいでしょう。 ※ぢゃん♪さんの仰るように、インスタンス変数として持たせた場合の話です。 読み出したデータを、クライアント毎にセッション有効中は保持しておく必要があるのなら、Sessionを使うべきでしょう。 | ||||||||||||
|
投稿日時: 2004-05-31 10:36
とある事から、A.aspxのコード内でBクラスをインスタンス化して 利用(データ取得メソッドの呼び出しなど)しているのかな?と推測しています。 であれば、ぢゃん♪さんの仰るように「staticな変数でない限り」 クライアントからのアクセスがあるたびにBのインスタンスが生成され、 各インスタンスがそれぞれ配列を保持しているので 値が書き換えられたりすることはありません。 なちゃさんとかぶってしまいました^^; [ メッセージ編集済み 編集者: 一休 編集日時 2004-05-31 10:38 ] | ||||||||||||
|
投稿日時: 2004-05-31 10:57
ぢゃん♪様、なちゃ様、一休様ご返答ありがとうございます。
抽象的な質問にも関わらずお答えいただきありがとうございました。 static宣言時には間違いなくこのような動きになりましたので、 現在はpublicで宣言しております。 具体的には、 Bクラス内では、public string[] LIST=new string[10]; と宣言して、DBのデータを取得する関数(DB_get)が呼ばれた際に LISTにデータが入るようにしてあります。 A.aspx内で Bクラス名 Bclass=new Bクラス名(); とし、A.aspx内のある関数内で、 B.DB_get(); B.LISTをコントロールにバインドする処理; のように使用しています。 他の関数にまたがることはありません。 このような処理では、問題無いものでしょうか? よろしくご教授お願いします。 | ||||||||||||
|
投稿日時: 2004-05-31 11:04
それでしたら、問題ないと思います。 | ||||||||||||
|
投稿日時: 2004-05-31 14:14
ぢゃん♪様ご返答ありがとうございます。
何とか悩みも振り切れました。 今後もご教授よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-05-31 15:35
えっと、ASP.NETワーカプロセスは、デフォルトではメモリの60%に相当するメモリを確保すると、リスタートします。プロセスが再起動するので、他のプロセスに保管しているセッション情報以外はすべて消えます。
この点はご注意。 |