Caching and ASP.NET



我有一个与asp.net的工作方式更相关的问题,并且会尽力解释。

我的应用程序中有一个四个分层的体系结构

  1. Web(ASP.NET Web应用程序)
  2. 业务(班级库)
  3. 通用的Crud layer **(类库)
  4. 数据(类库)

这个通用的碎片层使用反射来设置和读取对象的属性,但是我读到使用propertyInfo相当昂贵,因此想缓存这些项目。

这是场景:

两个人访问该网站,让他们称他们为弗雷德(Fred)和吉姆(Jim)。弗雷德(Fred)创建了一个客户,该客户反过来称为通用CRUD层,并在System.RuntimeCache中缓存了客户类的属性信息。吉姆,然后几秒钟后也创建了一个客户。

我的问题是,来自弗雷德(Fred)和吉姆(Jim)的两个请求是否会导致获得两次触发信息?或第二次从缓存中检索它,即吉姆的请求更快,因为通过缓存获得属性信息?

我的想法是,因为我的crud是一个班级库,并且无法访问system.web.cache,属性信息不会在所有会话/用户中被缓存?

否,它将为每个请求发布新的查询(除非您已编码另有编码)。

在ASP.NET应用程序(浏览器,代理,服务器端响应缓存,中间对象缓存,DA层缓存)中可能发生多种缓存层,这些都可以配置/使用。但是,除非有人专门编写代码/规则/配置,否则在ASP.NET(或任何应用程序中)中永远不会缓存。

正如Alexei Levenkov所指出的那样,您必须配置缓存才能明确发生:您将不会自动捕获特定的属性值。

但让我指出的是,与编写代码直接访问属性相比,使用PropertyInfo昂贵,但与数据库往返的成本或服务器和最终用户之间的延迟相比,它的镜头显得苍白。诸如实体框架,WebForms和MVC之类的工具都广泛地使用了反思,因为其产生的性能成本完全值得减少维护成本。

避免过早优化。

最新更新