0

我一直在谷歌上搜索,但找不到答案;答案要么很明显(我需要更多培训),要么深藏在文档中(或没有文档)。一定有人知道这一点。

我一直在与坚持在 ASP.NET 站点上缓存一些静态文件的人争论,我认为不需要缓存所有其他生成动态 HTML 的文件(默认情况下;让我们忽略输出缓存)现在;让我们也忽略人们想到的缓存机制[内存中或网络外])。换句话说,当每个映射到它们的请求都从磁盘读取所有 aspx 文件时,为什么要缓存一些 xml 文件(不管它的访问频率如何)?如果我是对的,通过缓存这样的静态文件将获得很少(更少的磁盘读取操作),但会花费更多的内存(如果缓存在内存中)或者会导致更多的网络操作(如果缓存在外部机器上) . 有人知道 [通常] 请求 aspx 文件时实际上会发生什么吗?谢谢你。

4

3 回答 3

0

IIS 做了大量的缓存,所以直接,没有。但是,IIS 会检查 Web 目录中的任何更改,并在更改时重新加载任何更改的文件。有时 IIS 出现故障,您必须重新启动它才能检测更改,但通常它工作得很好。

PS 缓存机制可能会根据服务器使用情况频繁刷新数据,但缓存适用于 web 目录中的所有文件。任何检测到的源代码更改都会导致 IIS 刷新 Web 应用程序并重新编译/重新加载。

于 2011-06-08T17:25:16.410 回答
0

如果我没记错的话,ASPX 文件是在运行时编译的,在第一次访问时。将页面编译为 Page 类的内存实例后,针对内存中的对象处理对同一资源(ASPX 页面)的请求。所以本质上,它们是相对于磁盘访问被缓存的。

显然,动态内容是为每个请求生成的,除非使用输出缓存机制进行缓存。

关于内存消耗与磁盘访问时间,我不得不说,从性能的角度来看,将对象存储在内存中而不是每次都从磁盘读取它们是有意义的,如果它们经常使用的话。磁盘访问比 RAM 中的访问慢 2 个数量级。尽管不适当的缓存策略可能会将经常使用的对象从内存中推出,以便为很少使用的对象腾出空间,这可能会因明显的原因而损害性能。话虽如此,缓存对于高性能网站或 Web 应用程序来说非常重要。

作为更新,请考虑以下内容:

  • 典型的 DRAM 访问时间在 50 - 200 纳秒之间
  • 平均磁盘访问时间在 10 - 20 毫秒范围内

That means that without caching a hit against disk will be ~200 times slower than accessing RAM. Of course, the operating system, the hard-drive and possible other components in between may do some caching of their own so the slow-down may only occur on first hit if you only have a couple such files you're reading from.

Finally, the only way to be certain is to do some benchmarking. Stress-test both implementations and choose the version that works best in your case!

于 2011-06-08T17:25:24.673 回答
0

I believe that the answer to your question depends on both the version of IIS you're using, and configuration settings.

But I believe that it's possible to configure some combinations of IIS/.Net to avoid checking the files - there's an option to pre-compile sites, so no code actually needs to be deployed to the web server.

于 2011-06-08T17:38:44.713 回答