Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否建议使用专用静态字典<;字符串,字符串>;用于缓存?_C#_Asp.net Mvc_Dictionary_Caching - Fatal编程技术网

C# 是否建议使用专用静态字典<;字符串,字符串>;用于缓存?

C# 是否建议使用专用静态字典<;字符串,字符串>;用于缓存?,c#,asp.net-mvc,dictionary,caching,C#,Asp.net Mvc,Dictionary,Caching,我使用一个私有的静态字典来缓存菜单名 private static Dictionary<string, string> menuItemCache = new Dictionary<string, string>(); private static Dictionary menuItemCache=new Dictionary(); 对于添加的任何新菜单项,缓存都会通过我的[POST]操作方法进行更新。字典一直保存着菜单名,并被其他[GET]操作方法使用 我的问题是

我使用一个私有的静态字典来缓存菜单名

private static Dictionary<string, string> menuItemCache = new Dictionary<string, string>();
private static Dictionary menuItemCache=new Dictionary();
对于添加的任何新菜单项,缓存都会通过我的[POST]操作方法进行更新。字典一直保存着菜单名,并被其他[GET]操作方法使用


我的问题是使用静态字典而不是任何其他缓存技术,如果建议这样做的话。

使用静态变量时应该非常小心。静态变量在所有会话中共享。如果要为每个用户保留缓存,则应使用
会话
对象


就其本身而言,将缓存存储在字典中并没有什么错。字典具有快速查找功能,因此当在列表上使用字典时,您可能会从性能方面受益。

您应该非常小心使用静态变量。静态变量在所有会话中共享。如果要为每个用户保留缓存,则应使用
会话
对象


就其本身而言,将缓存存储在字典中并没有什么错。字典具有快速查找功能,因此在列表上使用字典时,您可能会从性能方面受益。

您可以使用
ConcurrentDictionary
,它至少是线程安全的,这在您的场景中非常重要。但它将由所有请求共享。如果您需要将菜单共享给所有用户/会话,那么您的缓存策略在我看来还可以,您可以将其更改为ConcurrentDictionary。您可以使用
ConcurrentDictionary
,它至少是线程安全的,这在您的场景中非常重要。但它将由所有请求共享。如果您需要将菜单共享给所有用户/会话,那么您的缓存策略在我看来是可以的,您可以将其更改为ConcurrentDictionary。