Visual Studio 2012打开时编译速度慢

时间:2012-10-17 14:36:00

标签: c# visual-studio-2010

下午所有,

我有一个非常奇怪的问题。当VS 2012打开时,编译时间非常慢。通过VS和/或直接通过命令行中的csc.exe构建时,编译时间较慢。

测试:创建包含以下项目的文件夹:

包含以下内容的批处理文件(compile.bat)

echo %time%
csc /target:library class1.cs
echo %time%

和包含以下内容的class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

现在打开visual studio命令提示符。导航到上面的文件夹并运行批处理命令,而不打开VS.在我的机器上,这大约需要10毫秒,非常完美。

我现在打开VS 2012,打开没有解决方案,除了打开应用程序以便devenv正在运行之外什么都不做。

现在通过运行批处理文件重复测试,编译时间现在是10000ms(10秒)。

我已经检查了事件查看器,查看VS打开时发生的任何事情,但是当它关​​闭时,使用procmon和filemon查找文件访问权限并检查VS是否在打开时启用任何服务,所有这些都没有成功/冲击。

我甚至尝试卸载并重新安装VS,这解决了前几个版本的问题,但随后又重新出现了。重新启动机器无效。我在VS中没有安装插件。

我的同事机器不显示此问题,并且它们具有相同的设置。这一切都在16GB RAM,64位win 7和SSD的机器上运行。

有人有任何线索吗?

2 个答案:

答案 0 :(得分:13)

我已经想到了这一点。我相信这是一些恶意软件的结果。我通过以下步骤诊断出问题。

  1. 下载ProcMon(http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx
  2. 在进程名称上为ProcMon添加过滤器:csc.exe
  3. 然后我从命令行运行编译,Visual Studio打开。花了大约10秒,太长了!看一下ProcMon窗口中的输出,我注意到看起来csc.exe暂停5秒,一次朝向跟踪的开始,一次到达结束。请参阅以下屏幕:
  4. 开始:

    Start

    结束:

    End

    似乎HKLM \ SOFTWARE \ Wow6432Node \ 5c28f8fbc6fe942的RegCloseKey导致csc.exe等待5秒,两次。

    REGKEY:

    RegKey

    然后我决定重命名这个条目(将_old添加到结尾),然后重新编译.... BINGO,它编译时间不到30ms!

    在研究了此密钥中包含的条目并进行了一些google后,结果发现此reg密钥是某些恶意软件的结果。我使用以下指南删除了恶意软件,现在问题已经彻底解决了。

    http://www.explosiveknowledge.net/main/2012/08/19/browsemngr/

    请注意,上面的指南不包含正确的reg条目,我认为病毒必须在某个时候进行了调整,我找不到指南中提到的reg条目,但只是删除了我的那些找到。

    请注意,reg键的5c28f8fbc6fe942部分似乎是随机生成的。如果您遇到此问题可能会有所不同,但其中包含的值仍将讨论“浏览器管理器”。

    希望这有助于某人!

答案 1 :(得分:2)

要了解您的查询,我们需要研究响应文件的概念。

响应文件是一个包含一组编译器命令行的文本文件 开关。执行CSC.exe时,编译器将打开响应文件并使用任何文件 就像在交换机上传递给CSC.exe一样,在它们中指定的开关 命令行。您可以通过在@符号前面的命令行上指定其名称来指示编译器使用响应文件。例如,您可以调用响应文件 MyProject.rsp包含以下文本:

/out:MyProject.exe /目标:winexe

要使CSC.exe使用这些设置,您可以按如下方式调用它:

csc.exe @ MyProject.rsp CodeFile1.cs CodeFile2.cs

这告诉C#编译器输出文件的名称以及要创建的目标类型。如您所见,响应文件非常方便,因为每次要编译项目时都不必手动表达所需的命令行参数。

安装.NET Framework时,它会在中安装默认的全局CSC.rsp文件 %SystemRoot%\ Microsoft.NET \ Framework \ vX.X.Xdirectory(其中X.X.X是版本的 您已安装的.NET Framework)。

Visual Studio 2012使用此默认响应文件来编译代码。 因为全局CSC.rsp文件引用了所有程序集。引用所有这些程序集可能会降低编译器的速度。