目前我正在使用ASP.net上的C#3.5开发项目管理应用程序.为了减少对数据库的命中,我使用静态变量缓存了大量信息.例如,用户列表在静态类中保存在内存中.该类在启动时从数据库中读取所有信息,并在更改时更新数据库,但它永远不需要从数据库中读取.
该类在写入数据库的同时将更新的信息与其他Web服务器(如果存在)绑定.pinging机制是一个Windows服务,缓存对象使用随机可用端口进行注册.它也用于其他事情.
数据量并不是那么好.目前我正在使用它来缓存用户(密码哈希,权限,名称,电子邮件等).它只是保存了一堆对数据库的调用.
我想知道这种方法是否有任何陷阱和/或是否有更好的方法来缓存数据?
陷阱:静态字段的范围是每个应用程序域,增加的负载将使服务器在池中生成更多应用程序域.如果您只读取静态数据,这不一定是个问题,但是您将在内存中获得重复数据,并且每次创建或回收应用程序域时都会受到影响.
最好使用Cache对象 - 它适用于这样的事情.
编辑:原来我错误的AppDomains(正如评论中指出的那样) - 应用程序的更多实例将在加载时生成,但它们都将在同一个AppDomain中运行.(但你仍然应该使用Cache对象!)