2011-08-11 4 views
11

Eksperymentowałem z projektem C++ przy użyciu Compile Time Hashing technique I found here. Makra działają zgodnie z oczekiwaniami, a czas kompilacji jest rozsądny, ale 64 makra rekursywne wydają się grać w piekło za pomocą IntelliSense. Po każdej krótkiej edycji IDE zawiesza się na ~ 30 sekund. Podejrzewam, że robi się zraniony, próbując przeanalizować zagnieżdżone makra. Jak tylko usuniemy linię #include "consthashmacro.h, reakcja powróci do normy.Co sprawia, że ​​plik nagłówkowy spowalnia VS2005 do indeksowania? (Uwalniany IntelliSense?)

Czy istnieje sposób wyłączenia IntelliSense dla określonego pliku nagłówkowego?

Znalazłem ten artykuł pod tytułem "Controlling IntelliSense Through Macros", ale rozwiązanie tam również nie działa poprawnie.

Być może to nie jest intelliSense? Jest to zdecydowanie związane z tym nagłówkiem. Jakieś pomysły?

EDIT:
Próbowałem wyłączenie Intellisense całości renaming the feacp.dll as recommended. Mam takie samo zachowanie - edycje powodują, że IDE będzie zawieszony na długi czas. Usunięcie nagłówka przywraca wydajność. Jaka inna cecha VS2055 może powodować to niesamowite opóźnienie?

Do odtworzenia:
Korzystanie z Visual Studio 2005, Utwórz nowy "Win32 Console Application" z ustawieniami domyślnymi (czyli: przy użyciu nagłówków skompilowane). Dodaj następujący kod do pliku cpp. (Fragment „consthashmacro.h” do katalogu źródłowego (dostępnego od zip file w miejscu Chris Sabaudii)

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

Kiedy wymienić #define CONSTHASH z linią zawierać pod nim, wydajność zwalnia do indeksowania.

+0

Czy projekt wykorzystuje prekompilowany nagłówek? Może mógłbyś spróbować umieścić w nim ten nagłówek. – Praetorian

+0

Dobry pomysł, ale (5 minut czekania później ...) to nie zadziałało. – AShelly

+1

W VS2010 'Narzędzia> Opcje> Edytor tekstu> C/C++> Zaawansowane' Widzę opcje wyłączania IntelliSense i takie, nie są dostępne w VS2005? – nobody

Odpowiedz

4

Miałem rację, że coś zostało zawieszone na rekurencyjnych makrach, ale to nie był IntelliSense. Sprawcą okazała się darmowa wersja Refactor! for C++ from DevExpress, którą zainstalowałem dawno temu (i rzadko używaną).

Po odinstalowaniu tego, wydajność IDE powróciła do normy. Ponownie włączyłem funkcję IntelliSense i działa bez żadnych problemów.

Chciałbym zaoferować formalne przeprosiny dla IntelliSense: Żałuję, że rzucam niesprawiedliwe oskarżenia.

0

więcej sugestii rozwiązywania problemów niż odpowiedź naprawdę, ale:

Grab kopię Process Explorer. http://technet.microsoft.com/en-us/sysinternals/bb896653

Zapoznaj się proces DLL, nici, gniazda, otwarte fi deskryptory le, itd. przez dwukrotne kliknięcie linii, w której proces jest wymieniony w Process Explorer.

Czy na nowo definiujesz CONSTHASH? Wypróbuj:

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

I przełóż go, aby sprawdzić, czy linia wykonania pomija definicję. Może twoje przedefiniowanie czegoś, co nie powinno być na nowo zdefiniowane?

+0

Dzięki za sugestie Znalazłem sprawcę poprzez zbadanie, co było różne w moim systemie i domyślną instalację. – AShelly

Powiązane problemy