1

たとえば、サーバーに対して3つのリクエストが行われた場合、それはWebアプリケーションの3つのインスタンスがメモリに入れられることを意味しますか?

ロックされたシングルトンを使用したり、クラスをキャッシュしたりして、オブジェクトが存在するかどうかを確認し、存在しない場合はオブジェクトを作成するたびに、オブジェクトがリクエストごとにキャッシュされることを意味しますか?または、一度キャッシュされ、リクエストごとに再利用されますか?

シングルトンをロックした場合、それはシングルトンを使用するオブジェクトが1回作成され、各リクエストが同じオブジェクトを使用することを意味しますか?または、オブジェクトがリクエストごとにシングルトンを使用して作成されているが、同じスレッドによって再度作成されていないことを意味しますか?

以前System.Web.HttpRuntime.Cache["key"]; に1mbのオブジェクトをキャッシュしていて、10個のリクエストが行われた場合、サーバー上の10 mbのメモリを使い果たしていますか?シングルトンを使用して新しいオブジェクトを作成した場合...スレッド化とメモリ割り当てに関してはどうなりますか?

4

2 に答える 2

1

IISでは、アプリケーションごとにAppDomainが作成され、同じAppPool内の他のアプリケーションとプロセスを共有します。

したがって、同じWebアプリケーション内のサーバーへの3つのリクエストは、同じAppDomainを共有します。

それがキャッシングとシングルトンにどのように影響するか:

System.Web.Caching.Cacheのドキュメントから:

このクラスのインスタンスはアプリケーションドメインごとに1つ作成され、アプリケーションドメインがアクティブである限り有効です。

オブジェクト(シングルトンなど)をロックすると、ロックのスコープもAppDomainになります。

于 2012-12-10T22:45:20.363 に答える
0

あなたのインスタンス-プロセスとあなたの3つのリクエスト-スレッドによって実行されます。したがって、シングルトンオブジェクトは3つのリクエストすべてで共有されます。キャッシュもリクエスト間で共有されます。この例では、1 Mbのみを割り当てます(10回更新されます)。ガベージコレクターは未使用のスペースを収集します。

于 2012-12-10T22:44:50.300 に答える