自编Roslyn构建性能:不如最初发布的Roslyn版本快

Ale*_*lex 8 .net msbuild roslyn

我用一句话做什么

检出的分支Update-1罗斯林GitHub的仓库,建设CSC.EXE和编译与CSC.EXE版本我只是给自己建了一个随机的解决方案.

预期结果

我希望该性能可与VS 2015 Update 1附带的原始Roslyn版本相媲美,该版本位于路径中: C:\Program Files (x86)\MSBuild\14.0\Bin

实际结果

与原始版本相比,我自己构建的Roslyn版本的构建性能要差得多.在我测试中使用的解决方案中:大约30秒对65秒.

我的程序更详细

  • 克隆https://github.com/dotnet/roslyn.git并签出分支更新-1
  • 使用Release配置构建Roslyn (尝试使用两者,Mixed Configuration以及x64解决方案平台.)
  • 为了编译测试解决方案,我更改了所有项目文件以使用csc路径的特定位置:

    <CscToolPath>C:\Path\To\Output\Location\Of\Roslyn\Binaries\</CscToolPath>

  • 出于测试目的,我正在从命令行构建测试解决方案

    MSBuild.exe /t:Rebuild /m:1 /verbosity:m MySolutionName.sln

  • 我之前也在干净:

    MSBuild.exe /t:Clean /m:1 /verbosity:m MySolutionName.sln

  • 为了测试VS 2015 Update 1附带的原始编译器,我将项目文件中的配置更改为:

    <CscToolPath>C:\Program Files (x86)\MSBuild\14.0\Bin\</CscToolPath>

问题

  • 我可以做些什么来实现与我自编的Roslyn版本相似的性能,就像最初发布的Roslyn dll一样?
  • 在构建Roslyn本身时还有其他事情(比如优化等)吗?

Kev*_*lch 7

最大的区别是Visual Studio在NGEN中安装的官方编译器作为安装的一部分编译.

但是,即使你NGEN,你也不会得到完全相同的结果,因为微软有配置文件引导的训练数据来支持部分NGEN,以便在二进制大小和JIT时间之间取得良好的平衡,而不是公共回购的一部分(类似于使用官方Microsoft私钥签名).