在哪里存储数据以避免数据库命中?

时间:2011-05-12 10:34:06

标签: c# asp.net

我正在使用webmethod从数据库获取数据&将它存储在一个静态变量中,这样下次它就不会经常访问数据库becoz。创建静态变量似乎不是一个正确的解决方案,这对于这种情况来说是一种不适应。

e.g

public static List<SupplierGridData> lstFullSupplierData;

public static List<SupplierGridData> GetProductData()
{
    if (lstFullSupplierData == null)
    {
        //first time get data from database
        lstFullSupplierData = new List<SupplierGridData>();
        lstFullSupplierData  = new POProcess().GetInquiryDetails();
    }
    else
    {
        //use lstFullSupplierData which holds data
    }
}

3 个答案:

答案 0 :(得分:6)

你想要的是缓存:

http://msdn.microsoft.com/en-us/library/xsbfdd8c.aspx

更具体地说,缓存数据:

http://msdn.microsoft.com/en-us/library/6hbbsfk6.aspx

还有会话状态:

http://msdn.microsoft.com/en-us/library/ms972429.aspx

这是以每个应用程序和每个用户的形式出现的。您还可以更改会话状态的后备存储。

答案 1 :(得分:1)

对此最简单的解决方案可能是命中一次if(!this.IsPostBack)然后将这些东西埋在页面的视图状态中,如果它不是太多东西(假设你不需要携带其他页面)。否则会话或缓存将像其他人建议的那样。

答案 2 :(得分:0)

您需要将数据存储在会话中,以便不再次访问数据库。

http://msdn.microsoft.com/en-us/library/ms178581.aspx