1

我有一个在线商店,软件是高度定制的,但不完全是我们的。我们出售旅游,其中一些有预订,所以我添加了一个日历,让他们选择他们想要的日期/时间。最初,每个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?

谢天谢地,这是在开发服务器上,而不是我的现场商店!

谢谢你的帮助。我学到了很多关于 C# 和 .NET 的知识,但它是树荫机制类型的东西,而且我缺乏正式的培训,在这种情况下确实会有所帮助。任何帮助表示赞赏!

4

1 回答 1

0

对于以后来的人:

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

对于我的情况,我决定使用 ViewState 来存储信息,因为它很小而且我当前的 VS 还不是很大。请注意对大量数据执行此操作,但就我而言,这是最好的。

于 2013-10-21T19:38:50.657 回答