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 回答