5

こんにちは私は私のサーバーのパフォーマンスについて質問を受けました...私は〜250のウェブサイトをホストするクラシックなasp cmsを手に入れました、ウェブサイトごとに私たちは使用してクラシックなASP辞書を構築します

set dict = CreateObject("Scripting.Dictionary") 
dict.add "test1","Value Test1"
dict.add "test2","Value Test2"
dict.add "test3","Value Test3"

その辞書は、すべてのユーザーのすべてのページに読み込まれます...

毎月約15万人のユーザーがこれらのウェブサイトにアクセスし、1回の読み込みごとに約10万の辞書を読み込んでいるとしましょう...

毎回辞書をロードする代わりに、アプリケーション変数を辞書として使用する必要がありますか?

サーバーのパフォーマンスが本当に向上するのでしょうか。

4

3 に答える 3

2

確かに、すべてのASP要求に対して辞書をロードすることは間違いなく悪い考えであり、パフォーマンスだけでなく仮想メモリの断片化にも悪影響を及ぼします。

代わりに配列を使用しても、ほとんど同じ問題が発生します。各要求には、配列を保持するために必要なすべてのメモリを割り当てる必要があり、各要求にデータを入力する必要があります。

簡単な答えは「はい」です。アプリケーションオブジェクトを辞書として使用します。これにより、メモリとCPUのコストが大幅に削減されます。欠点は、既存のアプリケーションオブジェクトの使用法と衝突することです。この問題を回避するために、キーのプレフィックスが必要になる場合があります。

于 2009-10-21T12:49:36.907 に答える
1

各ページで単一のscripting.dictionaryをインスタンス化することは、どのWebサイトでも問題にならないはずです。パフォーマンスが問題になる場合は、最初にページをプロファイリングして、問題がどこにあるかを確認することをお勧めします。最適化されていないクエリがどこかにあり、完了するまでに100ミリ秒以上かかる可能性があります。

1日に20万ページビューを処理する従来のASPサイトを運営しており、すべてのページ(25以上のインスタンス)でscriping.dictionaryを幅広く使用しています。いろいろなもののベースとして使っています。ディクトがガベージコレクターによって常に破壊されるとは限らないことを示すスクリプトの例はありますか?または、他の方法と比較してルックアップが遅いということですか?私たちが遭遇した唯一の不便は、「クローン」メソッドの欠如です。

于 2009-10-21T07:27:01.423 に答える
1

辞書オブジェクトはメモリの点で重く、ルックアップの点で遅く、大きなものであるため、辞書を1回だけロードすることを絶対にお勧めします。必要なときに、メモリ内で常に破棄されるとは限りません。したがって、ユーザーがページを離れた後でも、このオブジェクトは(明示的に「破棄」したとしても)破棄されるのを待ってメモリ内にとどまる可能性があります。次に、その倍数に、ユーザーごとの訪問ごとのページヒット数を掛けます...

代替のよりメモリライトな方法は、配列を使用することです-インデックスの追跡をどこかで維持できる場合は1次元(最良)、必要な場合はルックアップ関数を使用して2次元(他の人が維持している場合は確かに)現在または将来のコード)。

于 2009-10-20T18:11:00.770 に答える