[英]Is it bad practice to use static fields to cache large objects in 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.