0

私はこのようなことを達成しようとしています:

DataTable dt=new DataTable();
if (Session[Request.QueryString["Id"].ToString()] == null)
{
    Session[Request.QueryString["Id"].ToString()] = adRepo.GetPostById(Convert.ToInt32(Request.QueryString["Id"]));
}
dt = (DataTable)Session[Request.QueryString["Id"].ToString()];

それは推奨されることですか?セッション数が膨大になることはわかっています。しかし、これに代わるものはありますか?

4

2 に答える 2

1

キャッシュしようとしているオブジェクトは、訪問者のみが利用できます。別の訪問者が同じオブジェクトをリクエストした場合はどうなりますか? 2回キャッシュします。

キャッシュエクスペリオンタイムやタイムスライドなどの機能を使用できる組み込みのキャッシュ機能を使用することをお勧めします。または、単に HttpApplication に保存して、オブジェクトがグローバルになるようにします。

しかし、私はキャッシュを参照することをお勧めします:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

于 2012-08-06T18:23:48.550 に答える
0

クエリ文字列変数をセッション キーとして使用できない理由はありませんが、Simon が指摘したように、これはキャッシュの候補になる可能性があります。

これで何を達成しようとしていますか?あなたの例から、ある種の投稿のIDを渡し、その投稿を表すデータテーブルを投稿IDでセッションに保存しているように見えます。セッション変数をクリアしていますか? データ テーブルにはどのくらいのデータがありますか? これは、他のユーザーがアクセスしたい/必要とする可能性があるものですか? ユーザーはデータ テーブルの情報をどうするでしょうか? キャッシュの候補ではない場合でも、ユーザーが複数の投稿にアクセスしている場合、注意を怠ると、大量のゴミがすぐにセッションを詰まらせることになります。クエリの負荷はどれくらいですか? ここで SQL サーバーのキャッシュはオプションになりますか?

もう少し情報があれば、良い解決に向けて大いに役立ちます。

于 2012-08-06T18:36:39.807 に答える