0

我有一个与 ASP.NET 的工作原理更相关的问题,我会尽力解释,所以在这里。

我的应用程序中有一个四层架构

  1. Web(ASP.NET Web 应用程序)
  2. 业务(类库)
  3. 通用 CRUD 层**(类库)
  4. 数据(类库)

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

这是场景:

有两个人访问该站点,我们称他们为 Fred 和 Jim。Fred 创建了一个 Customer,该 Customer 依次调用 Generic CRUD 层并在 System.RuntimeCache 中缓存 Customer 类的属性信息。Jim,几秒钟后也创建了一个客户。

我的问题是 Fred 和 Jim 的两个请求是否会导致获取财产信息被触发两次?还是 ASP.NET 第二次从缓存中检索它,即 Jim 的请求更快,因为属性信息是通过缓存获取的?

我的想法是,因为我的 CRUD 是一个类库并且无法访问 System.Web.Cache,所以不会在所有会话/用户中缓存属性信息?

4

2 回答 2

1

不,它会为每个请求发出新的查询(除非您另有编码)。

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

于 2012-10-24T16:10:53.513 回答
0

正如 Alexei Levenkov 指出的那样,您必须明确配置缓存:您不会自动缓存特定的属性值。

但让我指出,虽然使用 PropertyInfo 与编写代码直接访问属性相比成本高昂,但与数据库往返成本或服务器与最终用户之间的延迟相比,它就相形见绌了。Entity Framework、WebForms 和 MVC 等工具都广泛使用反射,因为它产生的性能成本完全值得减少维护成本。

避免过早优化。

于 2012-10-24T16:17:59.800 回答