1

1〜2人のユーザーがテストして正常に動作していたアプリケーションを引き継ぐように依頼されましたが、より大規模なテストを行うと、クラッシュし始めました。ランダムなタイムアウトが発生し、コードがバインドする予定の特定の列を見つけることができないというメッセージが表示されますが、ユーザー数は1〜2人でした。

アプリケーションの構造は次のとおりです。

--------------
| WebSite    |
--------------
| WebService |
--------------
| Database   |
--------------

Webサイトは、Webサービスを介してデータベースとのすべての通信を行います。Webサービスコードを見ると、データベース作業を行うためにクラスを使用しており、これがクラスレベルの変数として宣言されていることがわかりました。

private static SqlConnection cn;

これは、接続が必要なページ上のすべてのメソッドで使用されていました。静的であるため、これはすべてのユーザーに対して1つのインスタンスしか存在しないことを意味しますか?削除して現在テストしているので、正しく表示されていることを確認したいだけです。その行を私に見たということは、接続オブジェクトの1つのインスタンスがすべてのユーザー間で共有されていたことを意味します。これは、1〜2人のユーザーにとって問題がなかった理由を説明しますが、ユーザー数が多いほど、より多くの人がそれを待つためにキューに入れられました。最終的にランダムエラーにつながります。私がこれを正しく理解していることを確認したいだけです。

ありがとう。

4

1 に答える 1

5

はい、その静的変数はユーザー間でアクセスされます。問題の本当の根本はスレッドセーフの欠如ですが、必ずしも接続オブジェクトの共有ではありません。

于 2012-04-09T14:29:16.097 に答える