2016-06-30 3 views
1

いくつかの混乱を解消するには、データがある程度大きくなる可能性がある場合に、グローバル変数を保存するためのセッションアプローチを使用すると適切かどうかアドバイスが必要ですか?データが大きい場合、グローバルアクセスのためにセッションに変数を格納するのが適切ですか?

+0

「グローバルアクセス」とは、すべてのユーザーが同じデータ、または各ユーザーが自分のプライベートコピーに「常に」アクセスできることすべてのユーザーが同じデータを読み込んだ場合は、Sessionの代わりにCacheを使用してみてください。 –

+0

すべてのユーザーが自分のプライベートコピーを持っている必要はありません。 –

+0

これは役立ちます:[セッション状態の使用について2回考える](https://brockallen.com/2012/04/07/think-twice-about-using-session-state/) – NightOwl888

答えて

0

いいえ、そうではありません。データをdbまたはいくつかのキャッシュに格納し、セッション内の一部のIDだけを保持します。

一般的に、セッションに保存する内容には非常に注意する必要があります。

デフォルトの動作は、本番サーバーをもたらす可能性メモリに大きなセッションデータを保存するASP.NETワーカープロセス

https://msdn.microsoft.com/en-us/library/ms178581.aspx

のメモリ空間にセッション変数を格納することです。ここに理由です間もなく物理的なメモリが使い果たされるため、クロールする必要があります。その後、あなたはメモリリークがどこにあるのか疑問に思って、それを探して時間を過ごすでしょう。

メモリを気にしない限り、プロダクションや開発中のInProcセッションモードを使用しないように助言します。いくつかの良いセッション状態プロバイダがあります。すなわちRedis Session State Providerです.Nugetをインストールし、web.configファイルに設定するだけです。

InProc以外のストアを使用する場合は、セッションに入れたデータが適切にシリアライズ可能であることを確認する必要があります。そうでない場合は、開発中にプロダクションサーバーに公開した後に見つけ出すほうがよいでしょう。したがって、開発と生産に同じSession State Providerを使用するようアドバイスしました。

0

グローバル変数は、セッションにはあまり適していません。セッションはユーザーごとであり、グローバルではありません。これに加えて、セッションは20分後に局所的に期限が切れますが、これは設定で制御できます。

私はこのためにアプリケーションキャッシュを使用します。これはグローバルで誰もがアクセスできるものです。さらに、データをいつでもリロードすることができます。

ここで、データのサイズにも意味があります。私は大量のデータをキャッシュに入れません。

もう1つの選択肢はデータベースを使用することであり、私はNoSqlデータベースを使用します。通常、データセットをキャッシュする場合、リレーショナルである必要はありません。データは簡単に前後に並べ替えることができるため、NoSqlデータベースでは素早く安価に設定できます。

関連する問題