asp.netのWebサイトでは、一部のページをキャッシュすることでパフォーマンスを向上させるサーバーコントロールが使用されています。asp.netのキャッシュされた共有サーバーコントロールが複数回表示される
ほとんどの場合はうまくいきますが、サーバーコントロールの1つがページ上に複数回表示されることがあります。時には2回、場合によっては3回表示されます。
私たちのオフィスの複数のコンピュータから同じように見えるので、ブラウザの問題ではありません。
問題の複製コントロール用の.ascxファイルを再アップロードすると、修正されます。私の推測では、何とかコントロールのサーバー側のキャッシュが間違っていて、ascxファイルを再アップロードすると、サーバーキャッシュがパージされるため、ページが次に要求されたときに新たに再作成できるようになります。
私の質問は以下のとおりです。
- は、誰がこれを経験していますか?
- これを修正する方法はありますか? 次のようにた.ascxファイルの先頭にディレクティブがある
:
<%@ OutputCache Duration="86400" Shared="true" VaryByParam="none" %>
<%@ Control Language="VB" ClassName="Banner_LocalGuides" EnableViewState="false" %>
制御は、このようにコンテンツページに登録されている:
<%@ Register TagPrefix="tymControls" TagName="LocalGuides" Src="~/Banner-LocalGuides.ascx" %>
タグは、コンテンツページで次のように使用されます。
<tymControls:LocalGuides ID="LocalGuides" runat="server" />
私が考えたことの1つは、IISでのアプリケーションプールのリサイクル期間のタイミングと、ascxファイルのOutputCache Duration属性との比較に関係する可能性があるということでしたが、まったく間違っている可能性があります。アプリプールのリサイクル時間は現在240分(14,400秒)です。私たちのサイトの設定上の
さらに詳細:古典的なパイプラインモードでasp.net 4を実行している
- 。
- は7
- は、マスターページを使用してvb.net
- でコード化されたIISが、た.ascxは
すべてのヘルプははるかに高く評価マスターページではないコンテンツページから参照されます。
なぜコントロールをキャッシュしているのですか?データは静的ですか? –
こんにちはジェームズ、私たちは、さまざまなページに表示されるサイト上のいくつかのデータボックスを持っています。これらの中にはデータベースから動的に生成されるものもありますので、データベースへのヒットを防ぐためにこれらをキャッシュしています。静的なデータだけを含むものもあります。現在、私たちは動的なものと静的なものの両方をキャッシュしています - 静的なものをキャッシュしないのは意味があると思います。動的なものは、コードを生成するために使用されるコード/データベースのクエリがかなり集中しているので、間違いなくキャッシュを必要とします。 –
コントロールの代わりにクエリの結果を単にキャッシュすることを検討しましたか?ちょっと考えました... –