1. ホーム

アプリケーションまたはセッションオブジェクトの非軽量コンポーネントのキャッシュを回避する方法

2022-03-18 01:33:04

  Application または Session オブジェクトにデータをキャッシュするのは良い方法ですが、COM オブジェクトをキャッシュするのは重大な欠点があります。頻繁に使用する COM オブジェクトを Application または Session オブジェクトにキャッシュする仕事は非常に魅力的ですが、残念ながら Visual Basic 6.0 以前で書かれたオブジェクトコンポーネントを含む多くの COM オブジェクトは Application または Session オブジェクトに格納されると深刻なボトルネックになります。



  特に、コンポーネントがあまり軽快に書かれていない場合、ボトルネックが発生する可能性が非常に高いです。軽量なコンポーネントとは、FTM(Free Threaded Termination)を取り入れたThreadingModel=Bothと記されたものや、ThreadingModel=Neutral(NeutralモードはWindows2000とCOM+の新機能)と記されたものである。以下のコンポーネントは軽量ではありません。



  フリースレッドコンポーネント(FTMとして組み立てられる場合を除く)



  アパートメント・スレッド化された部品



  シングルスレッド・コンポーネント



  構成されたコンポーネントは Neutral-threaded でない限り軽量コンポーネントではありません。apartment-threaded コンポーネントやその他の非軽量コンポーネントはページ全体のコンテキスト、つまり単一の ASP ページで作成および解放されるコンテキストでうまく機能します。



  非軽量コンポーネントがキャッシュされた場合、どのようなエラーが発生するのでしょうか?ASP はリクエストに応答するワーカスレッドのプールを維持し、通常、新しいリクエストは最初に利用可能なワーカスレッドによって制御されます。セッションがスレッドにロックされている場合、リクエストは関連するスレッドが利用可能になるまで強制的に待機させられます。ここに例えがあります。あなたはスーパーマーケットに行き、食品を買って、3番の支払カウンターで支払いをします。それ以来、そのスーパーマーケットで食品を買うときは、他の支払いカウンターがそれほど混んでいなくても、あるいは空いていても、3番の支払いカウンターに行くことが多いでしょう。