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

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

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

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

Возможно, это не IntelliSense? Это определенно связано с этим заголовком. Есть идеи?

РЕДАКТИРОВАТЬ:
Я попытался полностью отключить Intellisense, переименовав feacp.dll в соответствии с рекомендациями. Я получаю такое же поведение - изменения приводят к зависанию среды IDE в течение длительного времени. Удаление заголовка восстанавливает производительность. Какая другая особенность VS2055 может вызывать это невероятное отставание?

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

#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 с включенной линией под ним производительность замедляется до ползучести.

2 ответа

Решение

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

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

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

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

Загрузите копию Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.

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

Кроме того, вы переопределяете CONSTHASH? Пытаться:

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

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

Другие вопросы по тегам