2

私は、ソフトウェアの問題を解決するためにハードウェアを投入することは最善の策ではないと確信しています。そのため、サーバーの1つ(現在2ギガで実行されている)でいくつかのメモリの問題に気付いたとき、System.Web.HttpRuntime.Cacheの使用まで追跡しました。いくつかのサイトでは、これは理にかなっていますが、System.Web.HttpRuntime.Cacheを使用する50のサイトをスローすると、壁が崩れ始めました。

外部キャッシングサーバーのオプションがない場合、グローバルデータ保持に静的クラスまたはシングルトンのいずれかを使用するようにコードを変更することを検討しています(他のオプションは追加のdbリクエストを作成することです)。

データはまだ「メモリ内」にあり、サーバーにより多くのメモリを投入する必要があるかもしれないので、これに変更があるかどうかは完全にはわかりません。

シングルトンクラスまたは静的クラスでSystem.Web.HttpRuntime.Cacheを使用すると、オーバーヘッドが大幅に増加しますか?この問題を解決するために推奨されるアプローチは何ですか?

- アップデート -

現在のファイルキャッシュのメモリ使用量を監視しているときに、同じアプリケーションプール上のいくつかのサイトにアクセスしたときに、この数が急増していることに気付きました。この数はわずか1,000,000(私が想定しているバイト)に跳ね上がりました。アクティブなフラッシュエントリの数が増加してから減少するにつれて、この数は最終的に減少し始めることに気付きました 。

複数のアプリプールでこの数が多いと問題が発生するように見えるので、どうすればこれをすばやくフラッシュできますか?

キャッシュをリッピングするだけでなく(提案されているように、おそらく最善のアイデアではありません)、キャッシュされたオブジェクトの有効期限を短く設定するだけで、より良い結果が得られる可能性がありますか?

4

2 に答える 2

0

コードを変更するのとメモリを追加購入するのにかかる費用はどれくらいですか?

たった2GBのRAMを搭載したWindowsWebサーバーは仕様が不十分だと思います。

アイテムがキャッシュにとどまっている時間、使用頻度などを確認する必要があります。期限切れが早すぎるかのように、ボトルネックをスタックのさらに下に押しやる可能性があります。たとえば、ファイルシステムやDBの両方です。 RAMよりも遅い。

最初のステップとしてRAMを追加します。これが最も安価なオプションです。次に、パフォーマンスの問題を追跡して、最適化が必要かどうかを確認します。

于 2012-03-23T10:30:04.490 に答える
0

これらのサイトのコードを調べたところ、次のことがわかりました。

                    HttpRuntime.Cache.Insert(
                        /* key */                "WebsiteConfiguration",
                        /* value */              website,
                        /* dependencies */       null,
                        /* absoluteExpiration */ Cache.NoAbsoluteExpiration,
                        /* slidingExpiration */  Cache.NoSlidingExpiration,
                        /* priority */           CacheItemPriority.NotRemovable,
                        /* onRemoveCallback */   null); 

NoSlidingExpirationとが大きな問題になるのではないかと思いますNotRemovable

ここで、30秒のキャッシュタイムアウトを設定すると、この問題が解決する可能性があります。

if (System.Web.HttpRuntime.Cache["WebsiteConfiguration"] == null)
.
.
.

                    HttpRuntime.Cache.Insert(
                        /* key */                "WebsiteConfiguration",
                        /* value */              website,
                        /* dependencies */       null,
                        /* absoluteExpiration */ Cache.NoAbsoluteExpiration,
                        /* slidingExpiration */  new TimeSpan(0,0,30),               // zero timespan or not long enough will cause a null ref exception when used
                        /* priority */           CacheItemPriority.Normal,
                        /* onRemoveCallback */   null);     

...私はまだこれを確認していません。

于 2012-03-23T14:13:47.087 に答える