代码之家  ›  专栏  ›  技术社区  ›  Blixt

优化ASP.NET网站项目的生成性能?

  •  8
  • Blixt  · 技术社区  · 15 年前

    我目前正在使用一个ASP.NET CMS,它在app_code目录中保存近500个代码文件,以及数百个Web表单,其中代码隐藏在网站的各个文件夹中。这是一个网站项目(不是一个Web应用程序项目),我不愿意更改它,因为这是一个涉及多个开发人员的项目,而且这也是CMS的发货方式。

    我正在寻找优化此网站项目的生成过程的提示和提示,因为Visual Studio通常希望重新生成所有源文件和代码隐藏文件,这可能需要几分钟时间。

    有没有办法避免重建所有文件?我应该提出将我们的代码和CMS代码分离成单独的Web应用程序项目(而不是网站项目)的观点吗?有没有其他方法来提高构建性能?

    5 回复  |  直到 6 年前
        1
  •  13
  •   TheEvilPenguin    6 年前

    如果最简单的解决方案是尽可能保持.cs结构的相似性,那么我会按照Andreas的建议将应用程序代码移动到至少一个其他项目中。

    Scott Guthrie posted a few tips 在VS2005中进行编译时,您没有指定所使用的版本,但应用了相同的速度提示。他的文章的第二部分是专门针对网站项目的。

    另一个技巧是,如果你正在处理页面,而不是在 App_Code 目录, there is a build option that may be useful . 去 项目属性 gt; 建造 改变 在运行启动页之前 从生成网站到 构建页面 ,这将仅在启动调试器时生成启动页。我不确定这种情况是否经常发生,但是如果你的大部分工作发生在页面上而不是 应用程序代码 ,这将节省大量编译时间。

    应用程序代码必须一起构建,您应该避免将代码放在其中等。其他地方的一切都应该是。请注意:在Web应用程序中,编译时间(至少在调试时)通常快30-50倍。也就是说,每次代码更改都必须重新编译整个应用程序,这样就有缺点了……但是对于名称空间更改等,我理解应变补丁会给您带来什么。

    另外,请记住,当您将代码拆分为其他项目时,除了在编译方面更加简单外,Visual Studio将不需要编译这些其他依赖项项目,除非它们发生了更改。现在看来,一切都是公平的,因为项目中任何可以更改的内容都可能影响其中的其他内容……但是,如果将其拆分,Visual Studio将仅在其他项目更改或引用的项目重新生成时编译它们。

        2
  •  4
  •   Kiquenet user385990    9 年前

    您应该尝试一下我们最近添加的新优化器编译标志。

    <compilation optimizeCompilations="true">
    

    请看我的 blog post 去了解它是关于什么,在哪里得到它。除非您在Win7上或正在使用VS2010,否则您需要通过热修复程序获得它。

        3
  •  3
  •   AndreasN    15 年前

    您至少应该尝试将其转换为Web应用程序,除非有政治原因不这样做。这并不像听起来那么困难,最大的问题是所有开发人员可能都需要重新配置他们的解决方案。

    尝试将应用程序代码中的代码移动到不同的项目,因为它们实际上不需要在网站中。这至少会有点帮助。

        4
  •  0
  •   Jonas Stawski    15 年前

    我认为你最大的问题是大量的文件。我会将Web应用程序分成多个(至少2个)项目:您的Web项目和一个业务层(或类似的性质)。

    我认为应用程序代码中的大多数文件都是很少更改的实体或文件,因此在您的情况下,将它们保存在Web应用程序中没有多大意义。

    如果在对另一个项目中的某个文件进行更改时决定执行此路径,则在部署更改时必须非常小心,因为必须部署整个DLL。

        5
  •  0
  •   Martin Ellis    15 年前

    我们的项目也遇到了类似的问题,它的构建方式允许热添加新的WhiteLabel合作伙伴站点。

    我们发现加快构建时间的最简单方法是减少Visual Studio自身挂起的IO瓶颈。得到一个像样的固态硬盘(我们使用OCZ60GB顶点驱动器),你应该会发现构建时间大大提高。

    另一个节省时间的方法是减少项目的目录总数。对于Visual Studio遇到的每个新目录,它都会启动编译器的新实例。在同一个目录中拥有尽可能多的文件可以降低成本。(要获取使项目可维护的文件夹结构,请使用虚拟文件夹)