c#静态数据字典在源数据更改时会延迟 - 甚至跨IIS用户

时间:2013-10-15 17:52:03

标签: c# asp.net controls

我有一个在线商店,该软件是高度定制的,但不完全是我们的。我们出售旅游,其中一些有预订,所以我添加了一个日历,让他们选择他们想要的日期/时间。最初每次cal_SelectionChanged()调用都是从商店数据库中查找内容,当然,这种调用速度非常慢。我想使用数据字典一次获取信息,并在需要时使用它。

我有这堂课:

    public partial class ConLib_Custom_BuyTourProductDialog : System.Web.UI.UserControl

并在该类中声明。

    static Dictionary<string, string> CustomFieldDict = new Dictionary<string, string>();

我还有一个函数来加载我在页面上需要的数据库中的所有位。我的计划是在Page_Load()上调用它,只需在需要时访问该信息。

    protected void LoadCustomFieldDictionary()
    {
        string _sku = _Product.Sku.Trim().ToLower();

        if (CustomFieldDict.ContainsKey("Sku"))
        {
            // is the dictionary entry for *this* sku?
            if (CustomFieldDict["Sku"] == _sku)
            {
                return; // already have this one.
            }
        }

        CustomFieldDict["Sku"] = _sku;
        CustomFieldDict["EventId"] = TTAUtils.GetCustomFieldValue(_Product, "EventId");
        CustomFieldDict["ResEventTypeId"] = TTAUtils.GetCustomFieldValue(_Product, "ResEventTypeId");

        etc.
    }

然后我的老板加载了一个页面 - 好吧,一切都很好 - 并且改变了数据库中的一个数据位以指向另一个错误的ResEventTypeId。重新加载页面,它有新数据。他把它改回原来的状态,并且“卡在”错误的信息上。我在iPad上加载了一个浏览器然后去了那里,它也给我提供了错误的信息。

服务器似乎正在缓存DataDictionary,即使我们更改数据库所有访问者,即使在其他会话中,也会收到此缓存的错误信息。

  1. 你觉得这个评估是对的吗?
  2. 这样做的正确方法是什么,以便访问者更改日期获得某种缓存的查找速度,而另一个浏览器从数据库中获取新的设置?
  3. 如何让它“忘记”它认为知道什么并接受新信息直到我修复它?重置IIS?
  4. 谢天谢地,这是在开发服务器而不是我的实体店!

    感谢您的帮助。我已经学到了很多关于C#和.NET的东西,但它是树荫式机械类型的东西,我缺乏正式的培训,并且在这样的情况下真的会有所帮助。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

对于以后来过的人:

琼西所说的非常真实 - 静力学是可怕的。我从一个站点(链接到他链接的链接)发现,这样的静态对应用程序池级别是粘性的,因此任何其他浏览器都会得到“错误”的信息。

对于我的情况,我决定使用ViewState存储信息,因为它很小,而且我目前的V.S.已经不是很大了。要小心为大量数据做这件事但在我看来这是最好的。