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

Что делает этот файл заголовка медленным VS2005 для обхода? (IntelliSense освободилось?)

Я экспериментировал с проектом С++ с помощью метода компиляции Time Hashing, который я нашел здесь. Макросы работают так, как ожидалось, и время компиляции разумно, но 64 рекурсивные макросы, похоже, играют в ад с Visual Studio Intellisense. После каждого короткого редактирования среда IDE зависает в течение ~ 30 секунд. Я подозреваю, что он заводится, пытаясь разобрать вложенные макросы. Как только я удаляю строку #include "consthashmacro.h, отзывчивость возвращается в нормальное состояние.

Есть ли способ отключить Intellisense для определенного файла заголовка?

Я нашел эту статью под названием "Управление IntelliSense через макросы" , но решение, похоже, не работает правильно для меня, либо,

Возможно, это не intelliSense? Это определенно связано с этим заголовком. Любые идеи?

EDIT:
Я попытался полностью отключить Intellisense переименовать файл feacp.dll, как рекомендовано. Я получаю такое же поведение - редактирование приводит к тому, что среда IDE длится долгое время. Удаление заголовка восстанавливает производительность. Какая еще особенность VS2055 может вызвать эту невероятную задержку?

Воспроизведение:
Используя Visual Studio 2005, создайте новое "Консольное приложение Win32" с настройками по умолчанию (т.е. С использованием предварительно скомпилированных заголовков). Добавьте следующий код в файл cpp. (Извлеките 'consthashmacro.h' в исходный каталог (доступный из zip файл на сайте Chris Savoie)

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

Когда я заменяю #define CONSTHASH на строку include под ним, производительность замедляется до обхода.

4b9b3361

Ответ 1

Я был прав, что что-то зацикливалось на рекурсивных макросах, но это не было IntelliSense. Преступник оказался бесплатной версией Рефактор! для С++ из DevExpress, который я установил давно (и редко использовал).

Когда я удалил это, производительность IDE вернулась к нормальной. Я снова включил IntelliSense, и он работает без проблем.

Я хотел бы предложить официальное извинение IntelliSense: я сожалею, что на вас напал несправедливый аспект.

Ответ 2

Больше предложений по устранению неполадок, чем ответ, но:

Возьмите копию Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.

Проверьте процесс dll, потоки, сокеты, открытые дескрипторы файлов и т.д., дважды щелкнув строку, в которой процесс указан в Process Explorer.

Кроме того, вы переопределяете CONSTHASH? Попробуйте:

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

И перебейте его, чтобы увидеть, пропускает ли строка выполнения вашего определения. Может быть, вы переопределяете что-то, что нельзя переопределять?