1

インスタンス変数はヒープに格納されるため、スレッドセーフではないことを理解しています。ASP.NET シングル スレッド アプリケーションのコードをリファクタリングしており、インスタンス変数をもっと使用しようとしています。

私の質問は、マルチスレッドの問題が発生する可能性があるため、開発者はインスタンス変数の使用を避けているのでしょうか? (アプリが現在マルチスレッド化されていなくても、将来的にはマルチスレッド化される可能性があります)。関連付け (ローカル変数の場合と同様) ではなく、構成と集計を使用して設計を改善するには、インスタンス変数を使用する必要があると読んだことを覚えています。

開発者がいつインスタンス変数を使用し、いつローカル変数を使用するかを決定するのに役立つ基準はありますか? これをグーグルで検索し、MSDN を調べましたが、特定の質問に対する答えを見つけることができませんでした。

4

3 に答える 3

3

ASP.NET アプリケーションをシングル スレッドにするために何かしましたか? それ以外の場合は、デフォルトでマルチ トレッドです。

インスタンス変数は、スレッド間でオブジェクトを共有する場合、マルチスレッド アプリケーションでのみ問題になります。ASP.NET アプリケーションでは通常、各スレッドがオブジェクトの独自のインスタンスを作成するため、マルチスレッドは問題になりません。

スレッド間でデータを共有する必要がある場合でも、データをオブジェクトにカプセル化することが最善の方法です。プライベート インスタンス変数を使用し、メソッドまたはプロパティを介してそれらにアクセスすることにより、オブジェクト内のコードがデータが公開される場所を完全に制御できるため、オブジェクトの外部からのすべてのアクセスが同期されていることを確認できます。

于 2013-01-23T16:59:43.330 に答える
0

Web ページと Web ページのインスタンス変数について話していると仮定すると、マルチスレッドとスレッド セーフについて心配する必要はありません。asp.net/web サーバーがそれを処理します。このmsdn 記事では、asp.net によって提供されるスレッド セーフについて説明します。

于 2013-01-23T16:56:09.197 に答える
0

実際、静的変数を参照しています。静的変数はスレッドセーフではありません (一般に、変数への適切なアクセスを同期するコードを作成しない限り)。対照的に、インスタンス変数は、各要求スレッドが独自のコピーで動作するため、asp.netではスレッド セーフです。

静的変数は、すべてのリクエスト間で共有する必要があるデータを格納するためのものです。そのようなシナリオがない場合は、静的変数を使用する必要はありません。もしそうなら、クラスなど、すでにこれを提供しているクラスがありますCache

于 2013-01-23T16:56:38.977 に答える