65.9K
CodeProject 正在变化。 阅读更多。
Home

10个提高Visual Studio编译性能的技巧

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (12投票s)

2015年10月25日

CPOL

8分钟阅读

viewsIcon

190691

加快VS.NET编译速度的技巧和窍门

引言

随着业务需求的不断增长,ASP.NET项目变得越来越复杂和“庞大”,导致项目编译和加载时间越来越长。虽然购买更快的处理器、更好的硬件和增加内存大小始终是提高性能的选项。其次,在ASP.NET项目中进行架构更改,例如逻辑上分离项目、最小化程序集数量和创建单独的解决方案,也可以作为长期的策略。然而,如果想要立即看到改进,这些方法并不受欢迎。为了克服这些限制,有许多技巧可以用来快速提高应用程序的编译时间,从而极大地提高开发效率。

背景

我个人认为,当一个应用程序的编译时间超过一分钟时,就该坐下来考虑进行适当的调整,以使应用程序的编译时间保持在可接受的范围内。总的来说,改进的因素可以分为以下几类:

  1. 优化Visual Studio设置
  2. 整体项目架构更改
  3. 使用改进的硬件,如处理器、硬盘、内存等。

在本技巧中,我们将主要关注#1,优化Visual Studio设置,同时简要提及#2,项目架构更改。

改进技巧

我将首先从更改Visual Studio的配置开始,然后介绍一些项目级别的设置,接着是一些简单的架构更改,最后是一些值得一提的其他选项。

1. 使用并行编译

这是一个神奇的设置,可以在您的解决方案中并行编译项目。尽管您的项目中可能设置了项目依赖项,允许某些项目按特定顺序编译,但此设置会自动推断项目在编译期间的并行性。将此值设置为适合您机器的优化级别,例如,对于可以执行多达8个线程的i7处理器,您可以将其设置为8。这可以在Visual Studio中通过“工具”->“选项”->“项目和解决方案”->“生成和运行”进行设置。请参考下图:

2. 运行仅生成启动项目及其依赖项

在之前步骤提到的“生成和运行”设置中,勾选“运行仅生成启动项目及其依赖项”。当存在大量项目时,这可能特别有用,您只想构建和运行启动项目,而不必构建解决方案中的所有项目,即使它们之间没有依赖关系,并且这些不相关的项目可能包含生成前或生成后任务。请参考仅生成当前选定的项目

3. 设置生成详细程度

您可以根据自己的选择设置生成详细程度。然而,更新此设置也将减少生成开销并缩短生成时间。再次参考技巧#1中提供的相同截图,将MSBuild项目生成输出详细程度设置为“Minimal”。这将在生成输出窗口中显示最少的生成细节。如果您不需要查看输出,甚至可以将其设置为“Quiet”,或者根据需要偶尔将其设置为“Detailed”甚至“Diagnostics”来排查生成问题。

4. 预编译MVC Razor视图

默认情况下,MVC视图是在运行时编译的。我们可以通过将MVCBuildViews设置为true来在MVC项目生成期间编译MVC视图。然而,MVCBuildViews会带来性能损失,因此预编译MVC视图是有效管理MVC视图的首选方法。您可以参考使用Razor Generator预编译MVC Razor视图来亲自尝试。

5. 只生成必需的项目

您的解决方案中可能存在某些项目,例如安装程序项目或不直接用于执行启动项目所必需的项目,可以将其从生成中排除。将它们排除在生成之外是个好主意。要排除一个项目;在菜单栏上,选择“生成”->“配置管理器”。在“项目上下文”表中,找到您想从生成中排除的项目。在项目的“生成”列中,清除复选框。请参考下图:

6. 禁用实时防病毒扫描

这似乎与Visual Studio的生成时间无关,然而实时扫描器会在文件操作期间扫描文件。因此,调查防病毒扫描器并排除开发文件夹(包括.NET Framework临时文件和文件夹)是个好主意。

7. 神奇的项目设置

有一些项目设置也可以提高Visual Studio项目的生成时间。使用这些属性并非强制性,因为在设置它们时您可能会遇到不一致性,导致项目无法生成。然而,这些设置可以对开发系统的性能产生巨大影响。

将optimizeCompilations设置为true
<Compilation debug="true" targetFramework="4.5" optimizeCompilations="true"/>

此标志用于优化ASP.NET的编译行为,并适用于开发环境。该设置能够检测开发期间的小更新,例如单个方法的更新、新方法的添加、API的重命名或删除等,这些更新不需要完全重新编译。因此,只编译项目的特定部分。有关更多详细信息,请参阅优化ASP.NET编译行为的新标志

将MVCBuildViews设置为false

顾名思义,此设置用于生成基于MVC的ASP.NET项目中的MVC视图。如果您不使用预编译视图,那么在开发过程中MVCBuildview会占用MVC应用程序大约80%的应用程序生成时间。如果更新或添加了任何MVC视图,则必须将此设置设置为true,以便更新在编译后反映出来。

然而,在没有视图更改的情况下,可以将此设置设置为false,这将大大缩短生成时间。作为一种变通方法,您可以为Debug配置设置MVCBuildView false,为Release配置设置true。如果需要视图调试,那么可以根据需要手动将此设置设置为true

<MvcBuildViews>false</MvcBuildViews>

要设置其值,请在您选择的文本编辑器中打开您的MVC项目的csproj文件,并在YourProjecct.csproj文件中手动编辑该属性。

将生成详细程度设置为Diagnostic

根据第3点,设置最小生成详细程度也对生成有影响。将生成输出详细程度设置为“Diagnostic”将让您了解生成过程中调用的各个操作的详细信息。您可以更精细地查看和更好地控制生成过程中的微小活动,并根据您的需求进行微调。请参考下图查看同一内容的小片段。

从命令行构建解决方案

顺带一提,如果您从命令行构建解决方案,您可能会发现比使用Visual Studio IDE有更快的生成时间,因为它没有花哨的UI,并且您可以使用各种命令行选项。

ms build overvaluations /verbosity:diagnostic

8. 设置公共输出目录

此技术还可以帮助确保在生成期间没有重复的程序集和内容。它可以显著提高生成时间,因为相同的内容不会被复制到本地项目文件夹。请参考下图设置您的生成输出目录。

另一种替代技术是,将“复制本地”设置为false,也可以用来确保程序集不会被本地复制。然而,应谨慎使用此技术,以确保它不会破坏生成本身。有关更多详细信息,请参阅将复制本地设置为true

注意:还值得一提的是,可以使用RAM磁盘作为输出文件夹而不是硬盘。不过,我还没有尝试过这个设置。

9. 从项目中删除未使用的文件和死代码

让我们探讨一下代码结构上可以改进以提高性能的其他方面。首先,从项目中删除任何未使用的文件;未使用的类、已包含在项目中但从未引用的文件。不必要的代码会产生技术债务,并降低几乎所有应用程序的性能。

删除死代码还可以使您的代码量变小且易于管理。即使不是为了即时性能优化,也应该长期实践。在许多平台上都有许多静态代码分析工具可用于实现干净的代码。您还可以使用Visual Studio内置的代码分析工具来诊断与代码相关的问题。

10. 保持项目和程序集数量的最优

这更像是一个架构问题,但它也很适合提高生成时间。项目和程序集的数量越多,编译器执行编译所需的时间就越长。没有确切的好数字,但根据项目的复杂性和业务需求,项目和程序集的数量可能会有所不同。将其保持在最优水平可以实现快速的应用程序生成时间和运行时间性能,即使更改项目架构和设置是一个耗时且痛苦的过程。

摘要

提高特定应用程序的生成时间可能有很多方面,并且取决于许多因素。性能改进不能一蹴而就,而应是一个持续的过程。我没有提供确切的基准测试结果,因为结果会因您的项目而异。

我希望这能为您提供一些改进项目编译时间的想法,并且我知道可能还有许多其他改进点可以包含在本技巧中。

如果您有任何此类技巧和窍门,请分享!

相关阅读

历史

提高Visual Studio生成性能技巧的初稿。

© . All rights reserved.