Подтвердить что ты не робот

Медленное время компиляции при открытии Visual Studio 2012

Вторая половина дня,

У меня очень странная проблема. Когда 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
    {
    }
}

Теперь откройте командную строку визуальной студии. Перейдите в указанную выше папку и запустите командную команду без открытия VS. На моей машине это занимает приблизительно 10 мс, идеально.

Теперь я открываю VS 2012, не открываю никакого решения, ничего не делаю, кроме как открыть приложение, чтобы он работал.

Теперь повторите тест, запустив командный файл, время компиляции теперь 10000 мс (10 секунд).

Я проверил средство просмотра событий на все, что происходит, когда VS открыто, но не закрывается, использует procmon и filemon для поиска доступа к файлам и проверяет, разрешает ли VS какие-либо службы, когда он открыт, все без успех/воздействие.

Я даже попытался удалить и переустановить VS, это решило проблему для первых нескольких сборников, но затем повторилось. Перезапуск машины не влияет. У меня нет плагинов, установленных в VS.

Машины моих коллег не отображают эту проблему, и у них одинаковые настройки. Все это работает на машине с 16-гигабайтным баком, 64-битным выигрышем 7 и SSD.

У кого-нибудь есть подсказки?

4b9b3361

Ответ 1

Я понял это. Я считаю, что это было результатом некоторых вредоносных программ. Я диагностировал проблему со следующими шагами.

  • Загрузить ProcMon (http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx)
  • Добавить фильтр в ProcMon на имя процесса: csc.exe
  • Затем я запустил компиляцию из командной строки с открытой визуальной студией. Это заняло около 10 секунд, слишком долго! Глядя на выход в окне ProcMon, я заметил, что, как представляется, csc.exe приостанавливается на 5 секунд, один раз к началу трассировки и один раз к концу. См. Следующие экраны:

Начало:

Пуск

Конец:

End

Похоже, что RegCloseKey для HKLM\SOFTWARE\Wow6432Node\5c28f8fbc6fe942 заставлял csc.exe ждать 5 секунд, дважды.

RegKey:

RegKey

Затем я решил переименовать эту запись (добавлен _old до конца), затем я перекомпилировал.... BINGO, он скомпилирован менее чем за 30 мс!

Изучив записи, содержащиеся в этом ключе, и некоторые googleing, оказалось, что этот рег-ключ был результатом некоторых вредоносных программ. Я использовал следующее руководство для удаления вредоносного ПО, и теперь проблема полностью решена.

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

Помните, что приведенное выше руководство не содержит правильных записей в реестре, я думаю, что вирус должен быть изменен в какой-то точке, я не смог найти записи реестра, упомянутые в руководстве, но просто удалил те, найдено.

Обратите внимание, что часть ключа 5c28f8fbc6fe942 в рег-ключах генерируется случайным образом. Если у вас есть эта проблема, она может отличаться, но значения, содержащиеся внутри, будут по-прежнему говорить о "диспетчере браузера".

Надеюсь, это поможет кому-то!

Ответ 2

Чтобы понять ваш запрос, нам нужно изучить концепцию файла ответов.

A файл ответов - это текстовый файл, содержащий набор команд командной строки переключатели. Когда вы выполняете CSC.exe, компилятор открывает файлы ответов и использует любые переключатели, которые указаны в них, как если бы коммутаторы были переданы в CSC.exe на командная строка. Вы инструктируете компилятор использовать файл ответов, указав его имя в командной строке, добавленной знаком @. Например, вы можете получить файл ответов, называемый MyProject.rsp, который содержит следующий текст:

/out:MyProject.exe /Цель: winexe

Чтобы заставить CSC.exe использовать эти параметры, вы вызываете его следующим образом:

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

Это говорит компилятору С#, как назвать выходной файл и какую цель создать. Как вы можете видеть, файлы ответов очень удобны, потому что вам не нужно вручную выражать нужные аргументы командной строки каждый раз, когда вы хотите скомпилировать ваш проект.

При установке .NET Framework он устанавливает глобальный файл CSC.rsp по умолчанию в % SystemRoot%\Microsoft.NET\Framework\vX.X.Xdirectory(где X.X.X - это версия установленной .NET Framework).

Visual studio 2012 использует этот файл ответов по умолчанию для компиляции кода. Поскольку глобальный файл CSC.rsp ссылается на все сборки. Выполнение всех этих сборок может замедлить работу компилятора.