我们正在IIS6上运行一个asp.net网站。我们刚刚从.Net3.5迁移到.Net 4.0。 在我们的构建过程中,我们使用aspnet_compiler te预编译和aspnet_merge来合并程序集。
我们转换为.Net 4.0后,我们进行了性能测试。这表明4.0版本比3.5版本慢得多。
我们注意到,对于每个分页服务器,w3wp.exe进程从网站的/ bin目录中读取.compiled文件(即resultlistpage.aspx.cf9ca39a.compiled)。它不仅从bin目录中读取.compiled文件,而且还为页面上的每个控件读取相应的.compiled文件(如resultlist.ascx.639c3968.compiled)。每个页面请求都会发生这种情况。
我使用Sysinternals Process Monitor来看这个。
这些aspx和ascx文件实际上是MVC2视图。
我试图关闭“验证文件是否存在”' IIS6中.aspx en .ascx的选项,但这没有任何帮助。我还打开了“缓存ISAPI扩展程序”#39;我申请的复选框,但无济于事。
我们的3.5版本没有显示此行为。它只加载.compiled文件一次然后缓存它。
绝望,如何告诉IIS6不要为每个请求读取.compiled文件?
我们将转向IIS7,但不会很快。
答案 0 :(得分:0)
嗯......我总是假设IIS 有来检查.compiled文件,因为它包含源的哈希值;否则,如何确定你是否在同一时间更改了文件?无论如何,如果此行为在3.5和4.0之间合法地更改,您可以检查:
您是否在预编译阶段指定“可更新”?如果是这样,那可能就是问题所在。
您可能尝试的另一件事是指定“fixednames”,它会吐出完全命名的dll,这至少会让您确切知道哪些文件会被不断检查。