我目前正在使用Oracle数据库(使用EntitySpaces ORM)处理ASP.NET报告应用程序(C#)。性能/响应对于此应用程序的成功至关重要,因为它将在几天内被1000人使用。我非常想避免往返数据库,因为我知道这将是一个瓶颈。我的第一个想法(因为数据库的物理大小相对较小)只是将所有数据库对象缓存在应用程序缓存中,并根据需要从缓存中查询它们。当ASP.NET开始从缓存中删除项目时,我很快意识到我的逻辑存在缺陷 - 可能是因为正在使用太多的内存。在ASP.NET中存储和访问对象/集合的指导
是否有另一种/更好的方法来做到这一点?当应用程序启动时,是否存在另一种存储静态集合的方法,我可以保证不会被垃圾回收占用?我很了解页面级别的缓存,但这并没有多大帮助,因为我基本上构建了一系列对每个用户都是唯一的特别报告。
编辑:只是为了进一步澄清,缓存的所有数据的大小是< 5 MB。这个想法是缓存所有的对象,然后用linq过滤集合。
你在做任何数据分页?允许人们放置过滤器?我们在说多少行?不管你选择什么方法,都有权衡。有些选择以内存为代价提供性能,其他则以牺牲磁盘空间为代价提供性能。请记住,取决于您的应用程序池设置(在X时间或X内存或X CPU之后回收),整个应用程序池可能会重复使用删除所有缓存项目,导致缓存应用程序内存无用。 – 2012-02-17 04:24:25
您可以使用一些外部缓存服务器,如NOSQL dbs。这是相当容易实现的,它不需要太多的代码改变。他们中的很多是免费和开源的。如果您对这些选项感兴趣,请告诉我,我可以将您指向几个网站。 – ASetty 2012-02-17 07:36:21
我在上面稍微澄清了这个问题。最新的想法是继续使用应用程序缓存,但使用CacheItemPriority.NotRemovable选项。 – 2012-02-17 16:59:22