0
我正在使用asp.net Sqlmembership.GetAll()方法(分頁超載)。現在我想添加一個緩存層以緩存結果,但GetAll方法的輸出參數存在問題,該參數返回記錄的總數。當從緩存中檢索數據時,如何將值分配給totalRecords參數?使用緩存分配出參數totalRecords
我正在使用asp.net Sqlmembership.GetAll()方法(分頁超載)。現在我想添加一個緩存層以緩存結果,但GetAll方法的輸出參數存在問題,該參數返回記錄的總數。當從緩存中檢索數據時,如何將值分配給totalRecords參數?使用緩存分配出參數totalRecords
如果我的理解是正確的這個小流將幫助你實現你的目標
這是一個基本的流程:
GetAll
方法)在任何情況下,我會建議您使用自定義域類工作的MembershipUser
類而不是
這是一個基本的例子:
public IEnumerable<DomainUser> GetDomainUsers()
{
var context = HttpContext.Current;
var cache = context.Cache;
var domainUsers = cache["domainUsers"] as IEnumerable<DomainUser>;
if (domainUsers == null)
{
domainUsers = Membership.GetAllUsers().OfType<MembershipUser>().Select(x => new DomainUser
{
Email = x.Email,
Username = x.UserName
});
cache.Insert(
"domainUsers", // cache key
domainUsers, // object to cache
null, // dependencies
DateTime.Now.AddMinutes(30), // absoulute expiration
Cache.NoSlidingExpiration, // slading expiration
CacheItemPriority.High, // cache item priority
null // callback called when the cache item is removed
);
context.Trace.Warn("Data retrieved from its original source");
}
else
{
context.Trace.Warn("Data retrieved from cache");
}
return domainUsers;
}
我有問題與接受分頁參數的GetAllUsers重載:GetAllUsers(int pageIndex,int pageSize,out int totalRecords)。我不知道如何爲數據來自緩存中的totalRecords參數賦值 –
我明白了。但是你的目標是緩存來自數據庫的記錄,因此我認爲最好是緩存所有記錄,然後在內存中執行分頁。 **然而**,我建議你三思想你想完成什麼,如果你想緩存它可能是因爲查詢需要太長的時間來執行或者你的Web和數據服務器之間的延遲是不可接受的,如果這是這種情況,然後緩存整個對象並在內存中執行分頁。如果沒有,那麼緩存可能不會顯着改善您網站的性能 – Jupaol