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