Dlaczego xcodebuild i Xcode 4.2 są tak powolne?

Używam Xcode 4.2 na stosunkowo dużym projekcie (kilka dziesięciu tysięcy linii kodu) i jest strasznie powolny. Edycja jest ok, ale za każdym razem, gdy próbuję skompilować projekt (w Xcode lub z xcodebuild w linii poleceń), moja maszyna (quad core i7 MacBook Pro, 4 GB RAM) czołga się do zatrzymania. Zauważyłem, że bezpośrednio po uruchomieniu xcodebuild, rodzi więcej niż 8 procesów clang, bez uruchamiania" prawdziwych " procesów kompilacji. Żadne wyjście xcodebuild nie jest do tej pory widoczne na stout. Próbowałem zmniejszenie liczby równoległych procesów budowania, ale wciąż wiele procesów clang jest uruchamianych na początku. Projekt wykorzystuje 6 lub 7 bezpośrednio zależnych projektów zewnętrznych i ma może 120 plików źródłowych. Pod Xcode 3.2 projekt był kompilowany bardzo szybko. Co się dzieje? I jak Mogę zrobić Xcode szybko ponownie?

Author: Community, 2011-10-16

5 answers

Większość z nas ma trzy podstawowe opcje:

  • wróć do Xcode 3 dla codziennego rozwoju.
  • Rzuć więcej sprzętu.
  • Zmień struktury swoich projektów i zastosuj sztuczki programistyczne na dużą skalę (nawet jeśli 20-30 KSLOC nie jest duże).

Najprostszym rozwiązaniem jest powrót do Xc3. Tak, Xc4 wymaga partii więcej niż XC3; Pamięci, PROCESORA i miejsca na dysku oraz wejścia / Wyjścia. wpływa na Ciebie.

[1]} niedawno kupiłem nowy MBP z dwukrotnie większą ilością fizycznych rdzeni i dwukrotnie większą pamięcią fizyczną, uaktualniony do Lion i Ulepszony Xc4 w tym samym czasie. Czasy kompilacji poprawiły się , ale większość z nich jest w rzeczywistości wolniejsza i znacznie bardziej wymagająca zasobów. To wcale nie jest to, czego można oczekiwać od IDE, które również wyłącza wiele otwartych projektów, a także używa ujednoliconego widoku przestrzeni roboczej.

Przejście na Lion + Xc4 ponad dwukrotnie zwiększyło moje wymagania sprzętowe we wszystkich z następujących kategorii:

Pamięć

4GB to teraz za mało dla większości nietrywialnych projektów korzystających z Xc4 i Lion. Nadal możesz to zmniejszyć. Mam 8GB i 10GB na moich głównych maszynach 2, Xc4 zużywa to wszystko dość łatwo (ale moje projekty są bardziej złożone niż Twoje, chyba że piszesz reeaaaaardzo długie linie). W każdym razie, możesz zmniejszyć ten problem przez:

    Kupując więcej pamięci.
  • Wyłącz indeksowanie, jeśli budujesz ogromne projekty w Xcode. To może o połowę zużycie pamięci Xcode.
  • uruchamianie Xcode w 32 bitach. Nie jest to opcja dla wszystkich, ponieważ przekroczy 4 GB w większych projektach.
  • zmniejsz liczbę procesów budowania (ponownie).
  • ponowne uruchamianie Xcode często(nie robi zbyt dobrej roboty sprzątanie po sobie).
  • Użyj clang jako kompilatora. Instancje Clang na ogół zużywają mniej pamięci niż Apple GCC 4.2.
  • Odciążaj zależne od siebie cele, które nie zmieniają się często. Przykład: będziesz w większości przypadków nie trzeba odbudowywać bibliotek stron trzecich codziennie.

CPU

Xcode 4 używa nowego (dokładniejszego) parsera dopełnienia.

  • sparuj swoje wykresy zależności I zależności. Jest to dość łatwe w przypadku Obj-C, ponieważ każda instancja Obj-C jest wskaźnikiem. Przykład: usuń luźno zależne Framework includes z nagłówków.
  • odpowiednio oddziel zależności i moduły. Rozwijaj biblioteki, ale staraj się, aby były dość małe i bądź świadomy zależności, które dodadzą. Przykład: prowadzę projekt, w którym dev dodał małą funkcjonalność (mniej niż 1% aplikacji), ale ze względu na wymaganą liczbę zależności (np. Three20, a następnie kilka innych), Rozmiar binarny finalnego pliku wykonywalnego podwoił się (i czasy budowania poszły w górę, a parser miał dużo więcej pracy). Większość z nich nie była potrzebna do funkcji-po prostu nie można ich było rozebrać, ponieważ były symbolami objec.
  • zmniejsz liczbę tłumaczeń, jeśli możliwe.
  • zoptymalizuj sposób używania nagłówków przedrostków. Możesz je udostępniać i tworzyć bez dobrego powodu. Jest to bardziej korzystne dla kompilatora niż IDE.
  • zminimalizuj zużycie pamięci. GC work (w tym wszystkie NSObject allocs) zużywa ponad 1/3 zużycia procesora w większych projektach, ale nadal spędza dużo czasu na zbieraniu, gdy jego sterta jest ogromna.
  • Użyj zewnętrznych edytorów tekstu i klientów VC. Dość oczywiste, ponieważ Xc4 wyświetla SBBOD dość często w dużych projekty.
  • zminimalizuj złożoność języka. W kolejności złożoności: C, ObjC, C++, ObjC++. Im bardziej złożone tłumaczenia, tym dłużej zajmie parsowanie i kompilowanie źródeł, zwłaszcza gdy zależności są wysokie. Jeśli możesz łatwo skonfigurować bariery językowe w zależności, zrób to.
  • Możesz wyłączyć indeksowanie funkcji code sense poprzez defaults (zmniejsza również zapotrzebowanie na pamięć).

Dysk Twardy

Może to być Prędkość / rozmiar równowaga.

  • kup szybszy (np. SSD).
  • Czyszczenie i minimalizacja zależności nagłówka.
  • Użyj dysku RAM, np. Utwórz dysk RAM .
  • Kup więcej pamięci. Z ilością zużywaną przez Xc4, kończy się to zamianą na dysk często w dużych projektach.
  • Zoptymalizuj swoje Kompilacje, aby odpowiednio używać plików pch. Nie zawsze jest to oczywisty kierunek: nie korzystam z nich od kilku lat w dużych projektach.
  • Wyczyść pliki tymczasowe Xcode i Instrumenty pozostawiają po sobie, mogą być ogromne . W niektórych przypadkach można je zapisać w niestandardowych lokalizacjach. Jeśli zużywają dziesiątki GB, a Katalog kompilacji jest taki sam jak katalog rozruchowy, sprawisz, że dysk będzie działał znacznie mniej, regularnie czyszcząc go.

Buduje

  • W Xc4, xcodebuild równoległy do Xcode teraz podwaja pracę(oddzielne dirs kompilacji domyślnie). W Xc3 domyślne było budowanie do tego samego miejsca docelowego. Zweryfikuj swoje ustawienia - Xcode zrobi mnóstwo nadmiarowego budynku, jeśli na to pozwolisz(np. jeden cel na obszar roboczy / config, a nie płaski model Xc3).

  • Możesz też wypełnić szufladę czterordzeniowymi MacMinis i użyć go jako dedykowanego lub rozproszonego konstruktora.

File Bugs

(samo wyjaśniające)

 21
Author: justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:34:32

Jeszcze jedno możliwe rozwiązanie, które w niektórych przypadkach może pomóc przyspieszyć Xcode 4: w moim przypadku głównym problemem wydaje się być to, że przypadkowo cztery pliki z mojego build/ folderu zostały sprawdzone w moim repozytorium git. Podczas kompilacji Xcode zauważa, że folder kompilacji się zmienił i uruchamia git. Ponieważ folder kompilacji zawiera tysiące plików w moim przypadku, wydajność spadła. Usunięcie folderu build / całkowicie z Gita (i tak nie powinno być sprawdzane) zmniejszyło czas kompilacji i obciążenie systemu masowo. Wydajność jest nadal wolniejsza niż w Xcode 3, ale znacznie lepiej niż wcześniej.

 1
Author: Arne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 13:21:04

Możesz włączyć rozproszony budynek w preferencjach XCode i znaleźć jakąś przyjazną osobę, która pomoże Ci zbudować aplikację, tworząc klaster maszyn kompilacyjnych z Tobą.

Zabawne jest to, że nawet on jest wyłączony, Twój kompilator nadal używa innego algorytmu/mechanizmu, aby zbudować aplikację w niesamowitej prędkości, jeśli w porównaniu do problemów wcześniej ;)

Oznacza to, że w Apple zapomnieli o samotnych programistach, którzy nie pracują w zespołach, a więc samotni scenariusz kompilacji jest testowany wyłącznie w wersjach 4.0-4.2

 1
Author: Sandijs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-28 13:07:35

Szybka Uwaga dotycząca podejścia "Rzuć więcej sprzętu"..

Podsumowanie: doświadczyłem niewielkiego wzrostu prędkości od dokonania znaczącej aktualizacji sprzętu

Test: Zbuduj / Uruchom dokładnie ten sam projekt na sklonowanych MacBookach (gdzie jedyną różnicą powinien być ich sprzęt)

Stary Macbook Air (1,86 GHZ Core 2 Duo tylko 2GB RAM)
vs
Nowy Macbook Pro (2.3 GHZ Core i7 8GB RAM)

BUDOWANIE NA IPHONE 3GS
Macbook Air 1:00 - 1:15
Macbook Pro ~1:00

=> 0 do 0:15 przyrostu prędkości

BUDOWANIE NA IPHONE 4S
Macbook Pro ~0: 35
Macbook Air ~0:50

=> ~15 sekundy wzrostu prędkości

** Częściowo przetestowany: istnieje znacząca różnica między czasem budowania symulatora między 2 maszynami

 0
Author: user353877,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-14 20:44:13

Kolejnym winowajcą powolności są wtyczki. Wtyczka Subversions była absolutnie zabijając moją wydajność Xcode. Wykonałem instrukcje w tym więc post , aby go wyłączyć. WHEW!

 0
Author: Ben Flynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:31