0

私は永遠にグーグルで検索しましたが、これに対する答えが見つかりませんでした。答えは明白 (そしてもっとトレーニングが必要) か、ドキュメントの奥深くに埋もれている (またはドキュメント化されていない) かのどちらかです。誰かがこれを知っている必要があります。

私は ASP.NET サイトでいくつかの静的ファイルをキャッシュすることを主張する誰かと議論してきましたが、動的 HTML を生成する他のすべてのファイルがキャッシュされていないという単純な事実 (デフォルトでは、出力キャッシュを無視しましょう) には必要ないと思いました。今のところは、人が考えていた [メモリ内またはネットワーク上] のキャッシング メカニズムも無視しましょう)。言い換えると、すべての aspx ファイルがそれらにマップされるすべての要求でディスクから読み取られるときに、(アクセス頻度に関係なく) 一部の xml ファイルをキャッシュするのはなぜでしょうか? 私が正しければ、そのような静的ファイルをキャッシュすることで得られるものはほとんどありませんが (ディスク読み取り操作が少なくなります)、より多くのメモリが消費され (メモリにキャッシュされている場合)、またはより多くのネットワーク操作が発生します (外部マシンにキャッシュされている場合)。 . aspxファイルが[通常]要求されたときに実際に何が起こるか誰かが知っていますか? ありがとうございました。

4

3 に答える 3

0

IIS は大量のキャッシュを行うため、直接的にはいいえ。ただし、IIS は Web ディレクトリ内のすべての変更をチェックし、変更されたファイルを再読み込みします。ときどき IIS が機能しなくなり、変更を検出するために IIS を再起動する必要がありますが、通常は問題なく動作します。

PS キャッシュ メカニズムは、サーバーの使用状況に基づいて頻繁にデータをフラッシュする場合がありますが、キャッシュは Web ディレクトリ内のすべてのファイルに対して機能します。ソース コードへの変更が検出されると、IIS は Web アプリケーションをフラッシュし、再コンパイル/再ロードも行います。

于 2011-06-08T17:25:16.410 に答える
0

私が間違っていなければ、ASPX ファイルは最初のアクセス時に実行時にコンパイルされます。ページが Page クラスのメモリ内インスタンスにコンパイルされると、同じリソース (ASPX ページ) への要求がメモリ内のオブジェクトに対して処理されます。したがって、本質的に、それらはディスクアクセスに関してキャッシュされます。

出力キャッシュ メカニズムを使用してキャッシュされない限り、明らかに動的コンテンツはすべての要求に対して生成されます。

メモリ消費量とディスク アクセス時間に関しては、パフォーマンスの観点から、オブジェクトが頻繁に使用される場合は、オブジェクトを毎回ディスクから読み取るよりも、メモリに格納する方が理にかなっていると言わざるを得ません。ディスク アクセスは、RAM でのアクセスよりも 2 桁遅くなります。不適切なキャッシング戦略は、頻繁に使用されるオブジェクトをメモリから追い出し、めったに使用されないオブジェクトのためのスペースを確保する可能性がありますが、明らかな理由でパフォーマンスが低下する可能性があります。そうは言っても、キャッシングは高性能の Web サイトまたは Web アプリケーションにとって非常に重要です。

アップデートとして、これを考慮してください:

  • 通常の DRAM アクセス時間は 50 ~ 200 ナノ秒です
  • 平均ディスク アクセス時間は 10 ~ 20 ミリ秒の範囲です

つまり、ディスクに対するヒットをキャッシュしないと、RAM にアクセスするよりも最大 200 倍遅くなります。もちろん、オペレーティングシステム、ハードドライブ、およびその間にある可能性のある他のコンポーネントは、独自のキャッシュを実行する可能性があるため、読み取り元のファイルがいくつかしかない場合、最初のヒットでのみスローダウンが発生する可能性があります.

最後に、確実にする唯一の方法は、ベンチマークを行うことです。両方の実装のストレス テストを行い、自分のケースに最適なバージョンを選択してください。

于 2011-06-08T17:25:24.673 に答える
0

あなたの質問に対する答えは、使用している IIS のバージョンと構成設定の両方に依存すると思います。

しかし、IIS/.Net のいくつかの組み合わせを構成してファイルのチェックを回避することは可能だと思います。サイトを事前にコンパイルするオプションがあるため、実際に Web サーバーにコードをデプロイする必要はありません。

于 2011-06-08T17:38:44.713 に答える