2012-10-17 18 views
12

Afternoon all,Tempo di compilazione lento quando Visual Studio 2012 è aperto

Ho un problema molto strano. Quando VS 2012 è aperto, i tempi di compilazione sono molto lenti. Questo tempo di compilazione lento è presente quando si crea tramite VS e/o direttamente tramite csc.exe dalla riga di comando.

A prova: Creare una cartella con i seguenti elementi:

Un file batch (compile.bat) contenente:

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

e un class1.cs contenente:

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

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
    } 
} 

Ora apri un prompt dei comandi di Visual Studio. Passare alla cartella sopra ed eseguire il comando batch, senza VS aperto. Sulla mia macchina, questo richiede circa 10ms, perfetto.

Ora apro VS 2012, non apro nessuna soluzione, non faccio altro che aprire l'applicazione in modo che devenv sia in esecuzione.

Ora ripetere il test eseguendo il file batch, il tempo di compilazione è ora 10000ms (10 secondi).

Ho controllato il Visualizzatore eventi per tutto ciò che accade quando VS è aperto ma non quando è chiuso, usato procmon e filemon per cercare l'accesso ai file e controllato per vedere se VS sta abilitando tutti i servizi quando è aperto, tutto senza successo/impatto.

Ho anche provato a disinstallare e reinstallare VS, questo ha risolto il problema per le prime build ma poi si è ripetuto. Il riavvio della macchina non ha alcun effetto. Non ho installato plugin in VS.

Le macchine dei miei colleghi non visualizzano questo problema e hanno la stessa impostazione. Questo è tutto in esecuzione su una macchina con 16 GB di RAM, 64-bit Win 7 e SSD.

Qualcuno ha qualche indizio?

+0

Personalmente ho riscontrato lo stesso problema e molti altri fastidiosi problemi con il 2012. Ho contattato Microsoft quando era ancora in modalità RC e mi è stato detto di inserire una segnalazione di errore in ...Suppongo che non sia necessario attendere lo sp1 per risolvere i problemi :( –

+0

Durante la compilazione lenta con VS aperto, la CPU della tua macchina è limitata (difficile da credere) o legata al disco (più probabile, ma ancora difficile da credere con un SSD)? È più probabile che VS stia cercando di applicare alcuni signing o certificati che richiederanno del tempo, cosa che csc.exe non farà. –

+0

Invocare CSC direttamente tramite la riga di comando, con VS aperto, comporta comunque la penalità temporale. i7 con 16 GB di RAM e un SSD. Con nessun altro programma in esecuzione (che ho avviato), diverso da VS, ottengo il ritardo quindi sarei sorpreso se si trattasse di un problema di vincoli di risorse! –

risposta

13

L'ho capito. Credo che sia stato il risultato di qualche malware. Ho diagnosticato il problema con i seguenti passaggi.

  1. Scarica ProcMon (http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx)
  2. aggiunge un filtro per ProcMon il nome del processo: csc.exe
  3. Ho poi si passò una compilazione dalla riga di comando, con Visual Studio aperto. Ci sono voluti circa 10 secondi, troppo! Osservando l'output nella finestra ProcMon, ho notato che csc.exe si fermava per 5 secondi, una volta verso l'inizio della traccia e una volta verso la fine. Vedere i seguenti schermate:

Inizio:

Start

fine:

End

Sembrava che un RegCloseKey a HKLM \ SOFTWARE \ Wow6432Node \ 5c28f8fbc6fe942 stava causando csc. exe aspettare 5 secondi, due volte.

RegKey:

RegKey

Ho quindi deciso di rinominare questa voce (aggiunto _old alla fine), poi ho ricompilato .... BINGO, è compilato in meno di 30 ms!

Dopo aver studiato le voci contenute in questa chiave e un po 'di googleing, è risultato che questo tasto reg era il risultato di alcuni malware. Ho usato la seguente guida per rimuovere il malware e ora il problema è completamente risolto.

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

Si prega di essere consapevole del fatto che la guida di cui sopra non contiene le voci corrette reg, penso che il virus deve essere stato ottimizzato a somepoint, non riuscivo a trovare le voci REG menzionati nella guida, ma semplicemente cancellato quelli che avevo trovato.

Si noti che la parte 5c28f8fbc6fe942 della chiave reg sembra generata casualmente. Se si dispone di questo problema potrebbe essere diverso, ma i valori contengono all'interno continueranno a parlare di "Browser Manager".

Spero che questo aiuti qualcuno!

2

Per comprendere la query, è necessario esaminare il concetto di file di risposta.

A file di risposta è un file di testo che contiene un insieme di interruttori della riga di comando del compilatore. Quando si esegue CSC.exe, il compilatore apre i file di risposta e utilizza qualsiasi switch specificato in essi come se gli switch fossero passati a CSC.exe sulla riga di comando . Si istruisce il compilatore a utilizzare un file di risposta specificandone il nome sulla riga di comando preceduto da un segno @. Ad esempio, si potrebbe avere un file di risposta denominato MyProject.rsp che contiene il seguente testo:

/out:MyProject.exe /target: winexe

Per causare csc.exe utilizzare queste impostazioni, è 'd invocarlo come segue:

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

Questo dice al compilatore C# che cosa dare un nome al file di output e che tipo di destinazione per creare. Come potete vedere, i file di risposta sono molto convenienti perché non è necessario esprimere manualmente gli argomenti della riga di comando desiderati ogni volta che si desidera compilare il progetto.

Quando si installa il .NET Framework, si installa un file CSC.rsp globale predefinito nella SystemRoot% % \ Microsoft.NET \ Framework \ vX.X.Xdirectory (dove XXX è la versione del .NET Framework che hai installato).

Visual Studio 2012 utilizza questo file di risposta predefinito per la compilazione del codice. Poiché il file CSC.rsp globale fa riferimento a tutti gli assembly. Il riferimento a tutti questi assembly potrebbe rallentare un po 'il compilatore.

+0

Grazie mille per questa risposta dettagliata ma il problema sembra essere intermittente, controllerò il file di risposta e vedrò se esiste una delle dipendenze per vedere se riesco a capire perché questo potrebbe essere. –

+0

I ' Ho avuto un altro sguardo su questo, poiché il problema si verifica ancora a intermittenza. A mio modo di vedere, il file CSC.rsp verrà utilizzato indipendentemente dal fatto che invochi la compilazione tramite CLI o VS, il che significa che questa è la spiegazione, VS deve bloccare/utilizzare una di queste DLL in un modo che rallenta CSC. La prossima volta che si verifica il problema, visualizzerò FileMon e vedrò se riesco a vedere quale di queste dll causi il problema. –

Problemi correlati