2011-08-11 6 views
11

Stavo sperimentando un progetto C++ utilizzando Compile Time Hashing technique I found here. Le macro funzionano come previsto e il tempo di compilazione è ragionevole, ma le 64 macro ricorsive sembrano giocare all'inferno con Intellisense di Visual Studio. Dopo ogni breve modifica, l'IDE si blocca per ~ 30 secondi. Sospetto che si stia tentando di analizzare le macro annidate. Non appena rimuovo la riga #include "consthashmacro.h, la reattività ritorna normale.Cosa rende lento il VS2005 a questo file di intestazione? (IntelliSense scagionato?)

C'è un modo per disabilitare Intellisense per uno specifico file di intestazione?

Ho trovato questo articolo dal titolo "Controlling IntelliSense Through Macros", ma la soluzione non sembra funzionare correttamente neanche per me.

Forse non è intelliSense? È sicuramente correlato a quell'intestazione. Qualche idea?

EDIT:
ho provato disabilitando Intellisense interamente renaming the feacp.dll as recommended. Ho lo stesso comportamento: le modifiche causano l'arresto dell'IDE per lunghi periodi. La rimozione dell'intestazione ripristina le prestazioni. Quale altra caratteristica di VS2055 potrebbe causare questo incredibile ritardo?

per riprodurre:
Utilizzando Visual Studio 2005, creare una nuova "applicazione console Win32" con le impostazioni di default (cioè: mediante intestazioni precompilate). Aggiungi il seguente codice al file cpp. (Estratto 'consthashmacro.h' nella directory sorgente (disponibile dal zip file sul sito di Chris Savoia)

#include "stdafx.h" 

#define CONSTHASH(s) ((s)[0]) 
//#include "consthashmacro.h" 

void Send(long hash, long value) 
{ 
    printf("Sending %x %x\n", hash, value); 
} 

#define QQuot_(x) #x 
#define QQuote(x) QQuot_(x) 
#define Debug_Print(s, v) (Send(CONSTHASH(QQuote(__LINE__)##s), *((long*)&(v)))) 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
     int i = __LINE__; 
     float f= 3.14f; 
     Debug_Print("This is a test %d", i); 

     i++; 
     Debug_Print("This is a test %d", i); 
     Debug_Print("This was test %f", f); 

    return 0; 
} 

Se si sostituisce la #define CONSTHASH con la linea di includere sotto di esso, le prestazioni viene messo in ginocchio.

+0

Il progetto utilizza un'intestazione precompilata? Forse potresti provare a inserire questa intestazione. – Praetorian

+0

Buona idea, ma (5 minuti di attesa dopo ...) non ha funzionato. – AShelly

+1

In VS2010 'Strumenti> Opzioni> Editor di testo> C/C++> Avanzate' Vedo le opzioni per disabilitare IntelliSense e tali, non sono quelli disponibili in VS2005? – nobody

risposta

4

Avevo ragione sul fatto che qualcosa fosse bloccato dalle macro ricorsive, ma non era IntelliSense. Il colpevole si è rivelato essere la versione gratuita di Refactor! for C++ from DevExpress che avevo installato molto tempo fa (e usato raramente).

Quando l'ho disinstallato, le prestazioni IDE sono tornate normali. Ho riattivato IntelliSense e funziona senza problemi.

Mi piacerebbe offrire scuse formali a IntelliSense: mi dispiace di aver lanciato ingiuste ambizioni su di te.

0

più di un suggerimento di risoluzione dei problemi che una risposta davvero, ma:

prendere una copia di Process Explorer:. http://technet.microsoft.com/en-us/sysinternals/bb896653

Partenza il processo di dll, fili, prese, fi aperta i descrittori, ecc. facendo doppio clic sulla riga in cui il processo è elencato in Process Explorer.

Inoltre, stai ridefinendo CONSTHASH? Prova:

#ifndef CONSTHASH 
    #define CONSTHASH(s) ((s)[0]) 
#endif 

E si interrompe per vedere se la linea di esecuzione ignora la definizione. Forse stai ridefinendo qualcosa che non dovrebbe essere ridefinito?

+0

Grazie per i suggerimenti Ho trovato il colpevole esaminando ciò che era diverso dal mio sistema e un'installazione predefinita. – AShelly

Problemi correlati