C# csc.exe编译时间降级时;Microsoft.CodeDom.Providers.DotNetCompilerPlatform“;使用包装
我们的团队目前正在从C#5.0迁移到C#6.0语法,因此应该使用Roslyn编译器,而不是传统的编译器 我们必须使用“csc.exe”作为复杂解决方案编译过程的一部分。生成命令如下所示: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:\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实例外,还跨构建缓存元数据李>
你需要安装服务器(复制什么代码正在执行),并通过<代码> /Server < /代码>到所有的CSC调用 < P> >罗斯林团队不认为有人调用CSC.EXE作为其PARF调查的一部分。今天,在每次调用时都会对所有csc.exe进行JITT(有关更多信息,请参阅) 可能的解决方案:
- 在您正在使用的csc版本上运行ngen,希望您 需要JIT一次吗
- 使用编译器服务器,它除了重新使用csc实例外,还跨构建缓存元数据李>
您需要设置服务器(复制代码正在执行的操作)并将
/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