C# csc.exe编译时间降级时;Microsoft.CodeDom.Providers.DotNetCompilerPlatform“;使用包装

C# csc.exe编译时间降级时;Microsoft.CodeDom.Providers.DotNetCompilerPlatform“;使用包装,c#,.net,compilation,roslyn,csc,C#,.net,Compilation,Roslyn,Csc,我们的团队目前正在从C#5.0迁移到C#6.0语法,因此应该使用Roslyn编译器,而不是传统的编译器 我们必须使用“csc.exe”作为复杂解决方案编译过程的一部分。生成命令如下所示: c:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe -nologo -target:library -out:c:\repo\bin64\deb\common.dll @.\rspE0FF.tmp 此命令执行需要~400ms “rspE0FF.tm

我们的团队目前正在从C#5.0迁移到C#6.0语法,因此应该使用Roslyn编译器,而不是传统的编译器

我们必须使用“csc.exe”作为复杂解决方案编译过程的一部分。生成命令如下所示:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe -nologo -target:library  -out:c:\repo\bin64\deb\common.dll @.\rspE0FF.tmp
此命令执行需要~400ms

“rspE0FF.tmp”内容如下所示(它包含更多的*.cs文件,但是,这并不重要,它可以在任何一组文件上复制):

当使用Roslyn编译器时,执行时间会显示为~4100ms 命令相同,只是从包文件夹调用了csc.exe:

c:\NewRepo\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\RoslynLatest\csc.exe -nologo -target:library -out:c:\repo\bin64\deb\common.dll @.\rspE0FF.tmp
我们必须通过连续运行数百个csc.exe命令来构建解决方案,就像这样。总编译时间已从2分钟增加到8分钟。

这是预期的性能下降吗


关于如何调整这个问题,有什么建议吗?

< P> >罗斯林团队不认为有人调用CSC.EXE作为其PARF调查的一部分。今天,在每次调用时都会对所有csc.exe进行JITT(有关更多信息,请参阅)

可能的解决方案:

  • 在您正在使用的csc版本上运行ngen,希望您 需要JIT一次吗
  • 使用编译器服务器,它除了重新使用csc实例外,还跨构建缓存元数据
注意:msbuild任务会自动为您执行此操作,但在您的情况下,您需要手动执行此操作


你需要安装服务器(复制什么代码正在执行),并通过<代码> /Server < /代码>到所有的CSC调用

< P> >罗斯林团队不认为有人调用CSC.EXE作为其PARF调查的一部分。今天,在每次调用时都会对所有csc.exe进行JITT(有关更多信息,请参阅)

可能的解决方案:

  • 在您正在使用的csc版本上运行ngen,希望您 需要JIT一次吗
  • 使用编译器服务器,它除了重新使用csc实例外,还跨构建缓存元数据
注意:msbuild任务会自动为您执行此操作,但在您的情况下,您需要手动执行此操作


您需要设置服务器(复制代码正在执行的操作)并将
/server
传递给所有csc调用

csc.exe的ngen。解决方案编译时间减少到3分钟,这是可以接受的。以下是ngen命令:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ngen.exe安装/nologo C:\NewRepo\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\RoslynLatest\csc.exe但是在某些环境中ngen没有帮助,每次调用都会对csc.exe进行JIT。不幸的是,我无法找出成功的ngen.ngen图像的最佳条件只有1。在这台机器上,它们是在2号上安装的。对于他们反对的.NET Framework的确切版本,如果您更新了您的框架,csc.exe的Ngeningen将失效,这将大有帮助。解决方案编译时间减少到3分钟,这是可以接受的。以下是ngen命令:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ngen.exe安装/nologo C:\NewRepo\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\RoslynLatest\csc.exe但是在某些环境中ngen没有帮助,每次调用都会对csc.exe进行JIT。不幸的是,我无法找出成功的ngen.ngen图像的最佳条件只有1。在这台机器上,它们是在2号上安装的。对于他们反对的.NET Framework的确切版本,如果您更新了框架,则会使ngening无效
c:\NewRepo\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\RoslynLatest\csc.exe -nologo -target:library -out:c:\repo\bin64\deb\common.dll @.\rspE0FF.tmp