加速 ASP.NET 开发
Posted
技术标签:
【中文标题】加速 ASP.NET 开发【英文标题】:Speeding up ASP.NET development 【发布时间】:2009-03-31 06:10:39 【问题描述】:我们正在开发使用 DotNetNuke 作为框架的 Web 应用程序,并使用我们的自定义模块来实现所需的功能。问题是,当您对代码进行任何更改时,加载网站需要很长时间。我认为每次重启最多需要 1 分钟,这真的很慢。这会导致开发-重建-测试周期非常缓慢。
我们正在使用控制台项目和 winforms 项目作为新功能的测试平台,以加快开发速度,但仍有许多 UI 功能必须通过浏览器完成。
有没有人有关于如何加速/防止在 web 应用程序的 bin 文件夹中发生更改时发生的 appdomain 重启的任何提示?
【问题讨论】:
【参考方案1】:当您添加/更改页面时,DNN 会按需编译,如果您预编译它们,您的周转时间应该会快得多。
【讨论】:
我们使用Web应用程序项目,所以每个模块都应该预编译。但是我有时会注意到 IIS 出于某种原因会重建页面。 如果您认为 30% 到 50% 的 1 分钟要快得多,那么您是正确的。但是,20 秒仍然慢得要命。事实上,有许多 DLL 需要重新处理 - 每次访问新模块时,都会执行额外的编译。【参考方案2】:当与大型 Web 应用程序一起使用时,您遇到了 ASP.NET 的一个缺点。
DotNetNuke 有许多重要的 DLL 和 VB 文件,如果您所做的只是更改一个 DLL,它们都必须重新处理。如果您的 bin 中有 50 个模块 DLL,则所有 50 个模块 DLL 将在您下一次应用程序请求时由 ASP.Net 重新处理。
这是我的建议:
将以下文件夹连接到您的源代码管理(不是整个 DNN 文件夹):
bin(我建议忽略所有 DNN DLL,以便升级更顺畅) Portals_default\Skins Portals_default\Containers js DesktopModules(忽略 Admin 或任何内置模块) 图像(如果您愿意,可以忽略核心 DNN 图像,或者您自己的任何笨重图像文件夹,例如数千张客户照片) (可选)CompanyName\(您可能希望将其他需要对 DLL 的相对访问权限的 .NET 项目保留在 bin 文件夹中)当您的一位开发人员需要重复编译/页面加载时,他将通过消除 bin 文件夹中尽可能多的 DLL 获得最大收益。如果可以的话,它也将有助于使用准系统皮肤进行测试(它们很容易制作)。
准系统皮肤(最多应使用 1 或 2 个皮肤对象)和绝对最少的 DLL(DNN 核心 + 您自己的最低限度)将使您获得最佳的开发速度。
当您的开发人员完成一个模块的重点开发后,他可以更新那些他从源代码管理中删除项目的文件夹(此处为 svn),在完整的 DLL/Skin 集的上下文中完成对他的代码的测试,并且他会准备好的。
有时候,麻烦是值得的。我无法让您将 ASP.NET 重新处理时间缩短到几秒钟,但我可以让您缩短到 10-15 秒。 (假设您在 SSD 上运行)
就生产重启而言,请确保您的应用程序池在非工作时间回收。
我研究了多核设置是否能以某种方式减少重新处理时间,但没有任何运气(我有一个关于 serverfault 的悬而未决的问题)
【讨论】:
【参考方案3】:也许这会对你有所帮助?
Speeding up build times in ASP.NET
【讨论】:
以上是关于加速 ASP.NET 开发的主要内容,如果未能解决你的问题,请参考以下文章