由于我没有错误,我不知道这是否是提出这个问题的正确位置,如果不是,请指出我正确的论坛。无论如何......
我正在开发一个社交网络项目,现在它的运行速度非常慢,有些页面需要5到15秒才能加载。有一个“缓存”结构,但无论谁做到这一点,都没有使用已经从c#.net构建Cache
,相反,他们创建了一个静态List<object>
作为系统的缓存。即使是不合适,我也可以处理......
问题是,在每个页面请求中,我必须加载来自此cache
的用户数据,并且用户结构非常大,所以我想知道,而不是加载用户每次请求页面时缓存中的数据我将创建一些会话,其中包含每个页面所需的最常用数据,例如照片,名称,昵称,ID,以及当我需要从用户加载任何其他类型的数据时不常见的数据,我从缓存中请求它......
我不知道这是不是正确的方法,如果这是一个正确的地方问我,但我真的需要解决这个问题非常糟糕。所以我想从这里的专家那里得到一些建议。
答案 0 :(得分:3)
部分性能问题可能需要扫描缓存中的项目。字典可能更好,因为您可以按键检索项目。这是对本机缓存结构的更密切实现。
会话不利于网站的可扩展性。如果你计划像facebook那样大,那么使用会话进行缓存会杀了你
请参阅此其他相关问题:
What is a good way to store large temporary "session" data in a web application
和另一个体面的问题
Why is it a bad idea to use Session to store state in high traffic websites?
答案 1 :(得分:2)
同意Jason +1
评论用户对象有一个密钥(ID)。
如果你有一把钥匙,字典会更快。如果你的对象有一个可以表示为Int32的自然键,那么覆盖gethash和equals。对10,000的字典查找应该是毫秒。
键控收集声音就像您需要的那样。使用键控集合,其中一个属性(ID)是关键 keyedcollection
如果这是一个静态列表,我会在数据库上输入字典。由于你有一个单一的密钥字典将击败数据库。如果它是复合键,那么你必须使用数据库进行索引查找。