2

我们在 IIS6 上运行一个 asp.net 网站。我们刚刚从 .Net3.5 迁移到 .Net 4.0。在我们的构建过程中,我们使用 aspnet_compiler te precompile 和 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 扩展”复选框,但无济于事。

我们的 3.5 版本没有显示这种行为。它只加载 .compiled 文件一次,然后将其缓存。

绝望了,我怎么能告诉 IIS6 不要为每个请求读取 .compiled 文件?

我们将迁移到 IIS7,但不会很快。

4

1 回答 1

0

嗯...我一直认为 IIS必须检查 .compiled 文件,因为它包含源的哈希值;否则,它如何确定您是否同时更改了文件?无论如何,如果此行为在 3.5 和 4.0 之间合法更改,您可以检查:

您是否在预编译阶段指定“可更新”?如果是这样,这可能是问题所在。

您可能会尝试的另一件事是指定“fixednames”,它会吐出完全命名的 dll,这至少会让您确切地知道哪些文件正在被持续检查。

于 2012-10-02T06:00:31.343 回答