填写来自Caching的asp dotnet下拉列表

时间:2014-11-27 05:12:36

标签: asp.net caching

我在asp.net中有一个下拉列表,其中填写了代理列表。现在代理商名单是30,000。所以我想保留缓存中的所有数据,因为我们不需要一次又一次地从数据库中填充下拉列表。如何通过缓存实现这一目标。请指导

2 个答案:

答案 0 :(得分:1)

您使用特定的缓存框架吗?

.Net 4.5可以使用MemoryCache课程。

示例:

ObjectCache cache = MemoryCache.Default;

public Object GetCacheItem(string key) 
{
    return cache[key] as Object; 
}

public void SaveCache(string key, Object value)
{
    cache[key] = value;
}

public void RemoveCacheItem(string key) 
{
    if (cache.Contains(key))
        cache.Remove(key); 
} 

在课程中进行缓存设置后,您可以使用它来缓存代理列表。然后,将其加载到下拉列表。

警告:使用缓存时要非常小心。确保在特定生命周期结束时清除缓存。我见过一个IIS应用程序池使用服务器中所有内存的情况,因此必须不时地重新启动应用程序池。

答案 1 :(得分:1)

假设您有Cache变量,那么您必须将其转换为DataTable

DataTable tblCategories = (DataTable) Cache["Categories"];

然后检查,如果仍然是Datatable为空,则使用从数据库获取数据的LoadCategoryInDropDownList()函数从数据库中获取。

if (tblCategories == null) 
    {
      tblCategories = new DataTable();
      tblCategories=objDac.LoadCategoryInDropDownList();
      // It inserts new row in filled datatable.
      //This new row contains static data for user 
      //instruction Text such as" Select the Item"
      DataRow dr=tblCategories.NewRow();
      dr["CategoryID"]=0;
      dr["CategoryName"]="--Select Item--";
      tblCategories.Rows.InsertAt(dr,0);
      //Cache The DataTable in a Cache Memory for duration of one hour...
      Cache.Insert("Categories", tblCategories, null, 
             DateTime.Now.AddHours(1), Cache.NoSlidingExpiration);
    }

然后将下拉列表绑定到数据表

DropDownList1.DataSource = tblCategories

DropDownList1.DataTextField ="A Descriptive Field from Table";

DropDownList1.DataValueField="A key / Value Field from Table";

DropDownList1.DataBind();

您可以在此处参考http://www.codeproject.com/Articles/10033/A-generic-loading-of-data-in-a-DropDownList-using