2011-08-11 10 views
11

Estaba experimentando con un proyecto de C++ usando el Compile Time Hashing technique I found here. Las macros funcionan como se esperaba, y el tiempo de compilación es razonable, pero parece que las 64 macros recursivas están jugando al infierno con el Intellisense de Visual Studio. Después de cada edición breve, el IDE se bloquea durante ~ 30 segundos. Sospecho que se está terminando de analizar las macros anidadas. Tan pronto como elimine la línea #include "consthashmacro.h, la respuesta vuelve a la normalidad.¿Qué hace que este archivo de encabezado sea lento VS2005 a un rastreo? (¿IntelliSense exonerado?)

¿Hay alguna manera de deshabilitar Intellisense para un archivo de encabezado específico?

He encontrado este artículo titulado "Controlling IntelliSense Through Macros", pero la solución no parece estar funcionando correctamente para mí tampoco.

Quizás no es intelliSense? Definitivamente está relacionado con ese encabezado. ¿Algunas ideas?

EDIT:
I intentado desactivar Intellisense en su totalidad por renaming the feacp.dll as recommended. Obtengo el mismo comportamiento: las ediciones hacen que el IDE se bloquee durante largos períodos. Al quitar el encabezado se restablece el rendimiento. ¿Qué otra característica de VS2055 podría estar causando este retraso increíble?

para reproducir:
mediante Visual Studio 2005, cree un nuevo "Aplicación de consola Win32" con la configuración predeterminada (es decir: el uso de encabezados precompilados). Agregue el siguiente código al archivo cpp. (Extracto 'consthashmacro.h' en el directorio de origen (disponible en la zip file en el sitio de Chris Saboya)

#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; 
} 

Cuando se sustituye la #define CONSTHASH con la línea incluirá por debajo de ella, el rendimiento disminuye a un rastreo.

+0

¿El proyecto está utilizando un encabezado precompilado? Tal vez podrías intentar colocar este encabezado en él. – Praetorian

+0

Buena idea, pero (5 minutos de espera después ...) no funcionó. – AShelly

+1

En VS2010 'Herramientas> Opciones> Editor de texto> C/C++> Avanzado' Veo opciones para deshabilitar IntelliSense y esas, ¿no están disponibles en VS2005? – nobody

Respuesta

4

Tenía razón en que algo se estaba colgando en las macros recursivas, pero no era IntelliSense. El culpable resultó ser la versión gratuita de Refactor! for C++ from DevExpress que había instalado hace mucho tiempo (y rara vez se usaba).

Cuando lo desinstalé, el rendimiento de IDE volvió a la normalidad. He vuelto a habilitar IntelliSense, y funciona sin problemas.

Me gustaría ofrecer una disculpa formal a IntelliSense: Lamento haber lanzado una injusta disputa sobre usted.

0

más de una sugerencia de solución de problemas que una respuesta realmente, pero:

hacerse con una copia del explorador de procesos:. http://technet.microsoft.com/en-us/sysinternals/bb896653

Comprobar a cabo el proceso de DLL, hilos, sockets, fi abierta descripciones, etc. haciendo doble clic en la línea donde se muestra el proceso en Process Explorer.

Además, ¿estás redefiniendo CONSTASH? Proveedores:

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

Y punto de ruptura para ver si la línea de ejecución se salta su definen. ¿Quizás estás redefiniendo algo que no debería redefinirse?

+0

Gracias por las sugerencias. Encontré al culpable al examinar lo que era diferente entre mi sistema y una instalación predeterminada. – AShelly

Cuestiones relacionadas