0

我有一个搜索功能,完成后将数据存储在通用列表 ( List<ViewModel>) 中。到目前为止,我一直将 viewmodel 值分配给一个静态变量,以允许我在用户可能使用的任何页面请求上重新使用数据。

不过,经过今天的阅读,似乎静态变量值可以跨线程共享,这意味着如果我正在查看该站点,则包含我的搜索数据的静态变量可能会被其他用户修改。

在我的阅读过程中,我看到了诸如向[ThreadStatic]变量添加属性之类的解决方案,尽管这不仅不起作用,而且被我的进一步阅读完全驳回为不正确的解决方案。

其他人谈到在 中存储变量HttpContext.Current.Items,但我对此的理解是它只持续一个请求。

所以,我不确定这里的最佳解决方案 - 理想情况下,我宁愿不对我的应用程序进行太多根本性的更改,但总之我希望能够在许多请求中共享复杂的对象?这样做的最佳方法是什么?

非常感谢

4

3 回答 3

2

您可以将应该为每个用户单独保存在内存中的对象存储在会话 (HttpContext.Session) 对象中。您的部署当然必须支持会话。

于 2012-09-18T13:06:37.057 回答
1

你不能只使用OutputCacheAttribute吗?

于 2012-09-18T13:01:22.013 回答
0

静态变量是一个糟糕的选择。您可以使用会话或 ViewState。至于我 - 第一个更好。例如

    if (Session["tmp"] == null) Session["tmp"]=new DataSet();
    DataSet ds = (DataSet)Session["tmp"];
    {
      ...Do something with ds
    }       
    Session["tmp"] = ds;

您可以在页面或处理程序之间传递此数据集,但您必须注意会话的生命周期

于 2012-09-18T13:36:33.117 回答