- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サーバでファイルを書くとデータが混ざる?)
サーバでファイルを書くとデータが混ざる?
このQ&Aのポイント
- ASP.NET(VS2010)に関する質問です。あるページクラスがArrayList型変数を持っていて、ボタンクリックでファイルに文字列を書き込み、別のボタンクリックでダウンロードして表示する処理があります。複数の端末から行うと、稀にユーザーから明らかに自分の端末から処理した物と違うデータが表示されると指摘されます。原因として考えられる理由は、ArrayList型変数の初期化が宣言時にしか行われていない、クラス変数ではなくSession変数を使用すべきか、ファイルの書き込み時にロックをしていないことなどです。
- 質問:サーバでファイルを書くとデータが混ざる? ASP.NET(VS2010)に関する質問です。あるページクラスがArrayList型変数を持っています。ボタンクリックでファイルに文字列を書き込み、別のボタンクリックでダウンロードして表示する処理があります。複数の端末から行うと、稀にユーザーから明らかに自分の端末から処理した物と違うデータが表示されると指摘されます。ArrayList型変数の初期化が宣言時にしか行われていない、クラス変数ではなくSession変数を使用すべきか、ファイルの書き込み時にロックをしていないことなどが原因の可能性です。
- ASP.NET(VS2010)に関する質問です。あるページクラスがArrayList型変数を持っています。ボタンクリックでファイルに文字列を書き込み、別のボタンクリックでダウンロードして表示する処理があります。複数の端末から行うと、稀にユーザーから明らかに自分の端末から処理した物と違うデータが表示されると指摘されます。原因として考えられる理由は、ArrayList型変数の初期化が宣言時にしか行われていない、クラス変数ではなくSession変数を使用すべきか、ファイルの書き込み時にロックをしていないことなどです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あと、完全に一つのページに閉じてしまうというならビューステートを使用するという手もありますね。 (個人的にセッション変数を多用したくないのでそっちを使うことが多いです)
その他の回答 (1)
- khazad-lefty
- ベストアンサー率44% (296/668)
回答No.1
2ですね。 クラス変数(インスタンス変数ではなく)の場合はスコープが 「アプリケーション」になります。 クラサバなら書く端末でアプリケーションを上げてるわけですが、 Webアプリの場合はサーバーにひとつあるだけですよね。 なので、すべての変数を全ユーザーが共有している形になっているはずです。 この場合ならセッション変数を使うほうが変更点は少なくなるんじゃないかと思います。
質問者
お礼
遅くなりましたが、ありがとうございます。 >なので、すべての変数を全ユーザーが共有している形になっているはずです。 そうなのですか…どこかでインスタンスは接続毎に作られるような記述を見た覚えがあったのですが… で、クラス変数でも問題ないのかなと思ってました。 Session変数はページ間で移動する場合位しか使用することは無いのかなとも。 身内的には「ロック」を疑って、今週頭にそれで修正掛けて載せちゃったいました!? まずいな、また起こるな・・・ ちょっと、その方向で再度検討してみます。 ありがとうございました!!
お礼
大変遅くなりましたが、さらなる情報ありがとうございます。 セッションにしろビューステートにしろ、今まで使ったこと無かったのですが、どうにも避けては通れないみたいですね… 前回もそうなのですが、この現象は一月に数回しか起きなくて、今の所もまだ起きていないのですが、起きることを前提に修正方法を吟味したいと思います。