我用Google搜索了,我找不到答案;答案要么是显而易见的(我需要更多的培训),要么深深地埋没在文档中(或者没有记录)。有人必须知道这一点。
我一直在和那些坚持在ASP.NET网站上缓存一些静态文件的人争论,我认为没有必要为生成动态HTML的所有其他文件都没有缓存这一简单的事实(默认情况下,让我们这样做)暂时忽略输出缓存;让我们也忽略那个人[内存中或网络外]的缓存机制)。换句话说,为什么在映射到它们的每个请求中从磁盘读取所有aspx文件时,缓存一些xml文件(无论访问的频率如何)?如果我是对的,通过缓存这样的静态文件将获得很少的(更少的磁盘读取操作),但会花费更多的内存(如果缓存在内存中)或将导致更多的网络操作(如果缓存在外部机器上) 。当[通常]请求aspx文件时,有人知道实际发生了什么吗?谢谢。
答案 0 :(得分:0)
IIS执行大量缓存,所以直接,没有。但是,IIS会检查Web目录中的任何更改,并在更改时重新加载任何已更改的文件。有时IIS会被borked,你必须重新启动才能检测到变化,但通常效果非常好。
P.S。缓存机制可能会根据服务器使用情况频繁刷新数据,但缓存适用于Web目录中的所有文件。任何检测到的源代码更改都会导致IIS刷新Web应用程序并重新编译/重新加载。
答案 1 :(得分:0)
如果我没弄错,ASPX文件是在运行时编译的,首次访问时。将页面编译到Page类的内存中实例后,对内存中的对象提供对同一资源(ASPX页面)的请求。所以从本质上讲,它们是针对磁盘访问进行缓存的。
显然,除非使用输出缓存机制进行缓存,否则会为每个请求生成动态内容。
关于内存消耗与磁盘访问时间,我不得不说从性能角度来看,将对象存储在内存中是有意义的,而不是每次经常使用时都从磁盘读取它们。磁盘访问速度比RAM中的访问慢2个数量级。虽然不适当的缓存策略可能会将经常使用的对象推出内存,以便为很少使用的对象腾出空间,这可能会因为显而易见的原因而损害性能。话虽这么说,缓存对于高性能网站或Web应用程序非常重要。
作为更新,请考虑以下事项:
这意味着没有缓存对磁盘的命中将比访问RAM慢约200倍。当然,操作系统,硬盘驱动器以及其间可能的其他组件可能会对自己进行一些缓存,因此如果您只读取了几个这样的文件,那么减速可能只会在第一次打击时发生。< / p>
最后,唯一的方法是做一些基准测试。对两种实现进行压力测试,并选择最适合您的版本!
答案 2 :(得分:0)
我相信您的问题的答案取决于您使用的IIS版本和配置设置。
但我相信可以配置IIS / .Net的某些组合以避免检查文件 - 这是option to pre-compile sites,因此实际上不需要将代码部署到Web服务器。