簡體   English   中英

ASP.NET應用程序緩存中的大對象

[英]Large objects in ASP.NET application cache

所以我只是繼承了一個ASP.NET MVC應用...

該應用程序將用戶權限緩存在應用程序緩存中,這很好,但事實是它將所有權限緩存在單個鍵下 它基本上是一個50MB的大字典對象,其中包含一堆嵌套的字典。

在每個請求中,如下訪問50MB對象:

public bool HasAccess(string user, string permission)
{
   var cache = (GodCache)MemoryCache.Default["GodCache"]); //I am huge
   return cache[user][permission];
}

為什么這一個壞主意,最好的情況什么?

通常,我認為將其分解為較小的對象比在緩存中具有1個大對象更好。 在內存壓力下,緩存項將被逐出。 如果在緩存中只有一個大對象圖作為單個項目,則整個對象將被逐出,並且您必須重新構造整個對象圖,這將花費大量時間和資源。

相反,如果將緩存分解為較小的鍵/值對,則只有其中一些項目將被收回,並且大概將花費更少的時間和資源來重構單個項目。

此外,如果緩存將變為進程外緩存(如redis),則對象圖的序列化/反序列化會增加開銷,並且在繁重的負載下,它確實會消耗大量CPU周期一個巨大的物體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM