【发布时间】:2013-02-15 01:37:19
【问题描述】:
我正在尝试调试我们的 ASP.Net 应用程序中的一个问题,其中第一个页面访问可能需要长达五分钟。这个网站运行在.Net 3.5,有100个ascx控件和25个aspx页面,所以不小。
我注意到的是,当网站加载速度非常慢时,临时 ASP.Net 文件夹正在重新填充。完全加载并运行该文件夹的总大小约为 50 到 70 MB,其中包含 2000-3000 个文件。
我对如何以及何时清除该文件夹感到有些困惑?使用空文件夹从头开始加载该站点需要 5 分钟。但是在定期重新编译时,可能会更改一两个文件,该站点会在重建后 30 秒内出现。
我不明白文件夹何时被清除——有时即使在我运行干净并在解决方案上重建所有内容之后,通过 iisreset 和 web.config 更改进行了很好的衡量,该文件夹几乎网站重新加载时文件数量与以前相同,只需 30 秒即可启动。 (我们在 web.config 中使用了 'optimizeCompilations' 标志)
其他时候,在我无法解释的其他构建情况下,我们回到了 5 分钟的加载时间,因为文件夹会完全自行重建。
这个文件夹什么时候被清除,当它需要从头开始时,我可以做些什么来加快它的重新填充时间? (5 分钟 70 兆似乎有点慢?)
【问题讨论】:
-
页面仅按需转换为代码。我无法相信您的第一个请求涉及所有页面和所有控件,以便立即编译所有内容。这是不可能的。相反,如果您完全清除临时文件夹,您应该只看到与第一个请求相对应的这些文件。在任何情况下,这都不应花费 5 分钟。可能还有其他一些您没有提及或您没有意识到的事情发生。
-
@Wiktor Zychla:您确定这些页面只是按需编译,而不是所有内容都在首次访问时立即编译吗?当我清除 Temporary ASP.Net 文件夹并首次访问我的站点时,将重新创建整个文件夹,其中包含大约 1800 个条目。也许有一个编译标志决定了一种或另一种方式?
-
我有 99% 的把握。 Ade 你确定在应用程序启动的某个地方没有 hacky 代码来实际强制完全重新编译吗?
-
我不知道。关于此的 MSDN 文档似乎也表明整个应用程序也在启动时重新编译——stackoverflow.com/questions/450831/…
-
与您链接的问题中的答案类似,我们托管了大量大型应用程序,并且从未遇到过重新编译的问题。这总是需要几秒钟而不是几分钟。我建议做一个实验,部署您的应用程序但不要连接到它。相反,使用 aspnet_compiler -v 强制重新编译。测量时间并发布。通过这种方式,我们将知道是仅重新编译还是自定义代码减慢了第一个请求的速度。
标签: asp.net performance webforms