問題タブ [asp.net-caching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - HttpContext.Current.Cache はどのようにオブジェクトをメモリに保存していますか?
HttpContext.Current.Cache
オブジェクトをメモリに保存するために使用しています。
私が持っているコードは次のようになります:
これは非常に高速に機能します。
オブジェクトをメモリに保存する方法に興味があります。
ポインター値を保存していますか、それともオブジェクトをハッシュしてからメモリに保存しており、要求すると逆シリアル化されますか?
asp.net-mvc-3 - 高価な SQL クエリをメモリまたはデータベースにキャッシュしますか?
シナリオの説明から始めましょう。SQL Server 2008 を使用する MVC 3 アプリケーションがあります。ページの 1 つで、データベースから返され、ログインしたユーザーごとに一意である製品のリストを表示します。製品のリストを返すために使用される SQL クエリ (実際には VIEW) は非常に高価です。
- これは、現段階では変更できない非常に複雑なビジネス要件に基づいています。
- データベース スキーマは、他のアプリケーションで使用されているため、変更または再設計することはできません。
- 50,000 個の製品と 5,000 人のユーザーがいます (各ユーザーは 1 個から 50,000 個の製品にアクセスできます)。
ログインしたユーザーの製品ページを表示するには、次を使用します。
上記のクエリは、最大 50 行 (最大ページ サイズ) を返します。WHERE 句は、行数を最大 50k (ユーザーがアクセスできる製品) に制限します。ページの読み込みに約 5 ~ 7 秒かかります。これは、上記の SQL クエリを SQL で実行するのにかかる時間とまったく同じです。 問題:
ユーザーは製品ページに移動し、ページングを使用して結果を再ソートし、詳細ページに移動してからリストに戻る可能性が非常に高くなります。そして、結果を表示するのに 5 ~ 7 秒かかるたびに。
これは受け入れがたいことですが、同時に、ビジネス チームは、商品ページが最初に読み込まれるときに 5 ~ 7 秒かかることを認めています。したがって、 CACHINGについて考えました。
選択できるオプションが 2 つあります。少なくとも私にとって最も「明白な」オプションは、.Net キャッシュ (メモリ内/プロセス内) を使用することです。(現時点では、プロバイダー/ホスティング パートナーの技術的な制約により、分散キャッシュは許可されていないことに注意してください)。
しかし、私はこれにあまり満足していません。コードが新しいアイテムを挿入している間に.Netがキャッシュアイテムを絶えず削除してスペースを解放するなど、サーバーに他の問題を引き起こす可能性がある(50人または100人のユーザーが同時にログインしている場合)メモリ内に多くの製品が残る可能性があります。
2番目のオプション:
ここでの主な問題は、ユーザー x 製品 x アクセス ビューを生成するのに非常にコストがかかることです。そのため、フラット テーブル (つまり、データベース内のすべての製品 x ユーザーのキャッシュ) を作成できると考えました。このテーブルは、まさにビューの結果です。ただし、新しい製品が追加されたり、ユーザー権限が変更されたりすると、結果はいつでも変更される可能性があります。そのため、テーブルを常に更新する必要があり (数秒かかる場合があります)、これが少し複雑になり始めました。
同様に、ある種のキャッシュ プロバイダーを実装し、ユーザーからの要求に応じて、元の SQL クエリを実行し、ビューから製品を選択し (5 ~ 7 秒、1 回のみ許容)、その結果をフラットに保存します。 SQL では ProductUserAccessCache と呼ばれるテーブル。次のリクエストでは、このキャッシュされたテーブルから値を取得します (その特定のユーザーに対して結果がキャッシュされたことを簡単に識別できるため)。SQL での計算を行わない高速クエリを使用します。製品が追加されるか権限が変更されるたびに、キャッシュされたテーブルが切り捨てられ、新しいリクエストがあったときに、リクエストされたユーザーのテーブルが再作成されます。私にはそれほど複雑ではないように思えますが、基本的にここで行っていることは、新しいキャッシュ「プロバイダー」を作成することです。
- この種の問題を経験した人はいますか?
- .Net Caching (in proc) を使用したほうがよいでしょうか?
- 助言がありますか?
c# - refの問題によるasp.netキャッシング
私は C# を使用しており、proc キャッシュ フレームワークで asp.net を使用して大きなオブジェクトをキャッシュしています。そのため、オブジェクトを .net キャッシュに配置し、コード内の複数の場所で探します。キャッシュからオブジェクトを取得した後、それを変更します。オブジェクトなどのプロパティを変更します。オブジェクトは、値ではなく参照によって.netキャッシュに格納されているようです。したがって、キャッシュから取得したオブジェクトを更新すると、キャッシュ内のオブジェクトも更新されます。
これを回避する方法はありますか - キャッシュ内の内容が変更によって反映されることは望ましくありません。
c# - IIS サーバーがアプリケーション プールの再起動直後に 0 ~ 100% からジャンプする
サイトのアプリ プールで「タイムアウト制限」を 5 分に設定しました。
頻繁に停止して再起動していることに気付きました。アプリ プールが再起動した直後にw3svc.exe
、CPU が 0 から 100% の間で上下する奇妙な動作が開始されます。
CPUが上下に動き始める前に、アプリはブラウザからアクセスできるので、アプリがすでに「実行中」であるかのように、開始されたと認識します...それが何かを意味する場合。
C# ASP.NET MVC アプリのコードではないかと恐れていたので、最初はパニックに陥りましたが、約 5 分間上下に動かし、メモリと CPU の使用量が戻ってきた後、これが落ち着くことに気付きました。許容できる状態に。
アプリ プールのタイムアウトを 0 に設定して、このサイクルに頻繁に入らないようにしましたが、何をしているのか正確にはわからないので、微調整したいと思います。
/Content
サーバーが数千の画像を含むフォルダー全体をキャッシュしている可能性があるのではないかと心配しているため、キャッシュに関することを調べています。