1

現在、大量のメモリを消費するアイテム (実行時に変更されない) の大きなリストを含むオブジェクトがあり、このオブジェクトは (ユーザーごとに) 複数のセッションで使用され、それぞれで同一である必要があります。

そこで、大きなオブジェクトをコピーしたり、各セッションで新しいインスタンスを作成したりする代わりに、それを共有リソースとして使用することにしました。各セッションがオブジェクトのリストから読み取ってアイテムを取得し、それらに対して必要なことを行うようにします。これは Web アプリケーションであるため、メモリを節約したいと考えています。

ただし、リスト内のこれらのアイテムにもイベントがあり、各セッションはこれらのイベントをサブスクライブする必要があります。

そのため、アイテム イベントが発生すると、すべてのセッションで発生します。そのため、どのセッションがこのイベントを発生させ、そのセッションでのみ使用するかを確認するロジックを追加する必要がありました。

これを行うより良い方法はありますか?より効率的な方法は?大量のユーザー セッションが発生すると、これらの共有アイテムでイベントが発生したときに処理が本当に遅くなるのではないかと心配しています。

あなたの考えは何ですか?また、これらの「アイテム」を処理するとき、それぞれにかかる時間を知る方法がないため、イベントの使用に傾倒した理由にも注意してください。

4

1 に答える 1

0

そのため、アイテム イベントが発生すると、すべてのセッションで発生します。そのため、どのセッションがこのイベントを発生させ、そのセッションでのみ使用するかを確認するロジックを追加する必要がありました。

つまり、共有データ内のイベントは、最終的にそのイベントを発生させるアクションを要求が開始するたびに発生しますが、イベントが各セッションにバブリングしないようにします。それでも、これは、共有データとすべてのセッションの間でイベント ハンドラーが作成されることを意味します。

これを行うより良い方法はありますか?より効率的な方法は?大量のユーザー セッションが発生すると、これらの共有アイテムでイベントが発生したときに処理が本当に遅くなるのではないかと心配しています。

あなたのソリューションにはいくつかの問題があります。イベントハンドラーはセッションと共有データの間に作成されるため、セッションが期限切れになったときにセッションオブジェクトをガベージコレクションすることはできません (ここでは、セッションが期限切れになったときにイベントハンドラーをクリーンアップしないと想定しています。間違っている場合は修正してください)。結果: メモリ リーク。

あなたの考えは何ですか?また、これらの「アイテム」を処理するとき、それぞれにかかる時間を知る方法がないため、イベントの使用に傾倒した理由にも注意してください。

私はあなたが何を意味するのか理解できません。それぞれのイベントにかかる時間がわからないのに、イベントが問題を解決するのはなぜですか? イベントとそのイベント ハンドラは引き続き順次実行されます。

セッションアプリ間で共有データがどのように共有されているかが不明であるため、これに対するより良い解決策を提供できないことを残念に思います。共有データのイベントについて言及しましたが、それらはどのように機能しますか? イベントは、アクションを開始したセッションによってのみ処理されるべきであると述べたので、1 つの解決策は、共有データアクションを開始するときに共有データにコールバック関数を与えることです。その後、必要に応じてコールバック関数を呼び出すことができます。この方法では、セッション オブジェクトを共有データにバインドするイベント ハンドラが作成されないため、ガベージ コレクションが問題になることはありません。

于 2012-11-16T18:31:13.533 に答える