Xcode 4 - niska wydajność

128

Mam problem z Xcode 4, który naprawdę bardzo wolno reaguje na interakcje użytkownika, np. Edytowanie kodu, przewijanie obszarów itp. Dzieje się tak szczególnie w przypadku projektów na większą skalę z wieloma kontrolerami / plikami widoku itp.

Całkowicie wyczyściłem dysk twardy i ponownie zainstalowałem Snow Leopard i Xcode w zeszłym tygodniu, ale stopniowo doszło do frustrującego czasu reakcji ponownie (przez kilka dni), znacznie zakłócając przepływ pracy.

Czasami usuwałem również „dane pochodne” projektu za pośrednictwem Organizatora -> Projekty i to miało niewielki wpływ.

Zastanawiam się, czy jest coś, co mogę zrobić, aby poprawić wydajność, poza uzyskaniem w pierwszej kolejności maszyny o wyższej specyfikacji.

FYI Używam MacBooka z procesorami Intel Core 2 Duo 2 GHz i 4 GB pamięci RAM.

Na wypadek, gdybyśmy musieli zaktualizować, chciałbym również wiedzieć, czy ludzie doświadczają tak słabej wydajności Xcode 4 na dobrze wyspecjalizowanych maszynach (co sprawiłoby, że nasza aktualizacja sprzętu byłaby raczej bezcelowa, ponieważ tylko Xcode ma problem z wydajnością na MacBooku).

Jeśli ktoś ma jakieś sugestie lub zalecenia lub może nawet dać nam znać, jak ulepszony sprzęt wpływa na wydajność Xcode w większych drzewach projektów, byłoby to niezwykle pomocne, a także cenne źródło informacji dla innych programistów w podobnej sytuacji.

Kzrbill
źródło
Zrobiłem dość długi opis dla Xcode 4.2 w tym poście: stackoverflow.com/questions/7780663/ ...
justin
1
Znalazłem lepsze rozwiązania niż wszystkie wyjaśnione tutaj. Przerzuciłem się na AppCode. Tak, to było 99 dolarów, ale było tańsze niż kupno nowego Maca. Mam MacBooka Pro z 2010 roku. Ma szybszy procesor niż którykolwiek z MacBooków Air, ale tutaj, w biurze, ludzie używający go mogą nadal uzyskać większą prędkość. Ponownie zainstalowałem Lion, a następnie wykonałem czystą instalację dla Mountain Lion i nadal nie mam szczęścia. Więc teraz używam AppCode i znowu jestem szczęśliwy.
HotFudge
1
Niefortunny fałsz. AppCode jest nawet wolniejszy niż Xcode. Wygląda na to, że jest to aplikacja Java. Zawiera dużo wymyślnego uzupełniania kodu, automatycznego #importowania i tak dalej, które wymagają procesów w tle. W niektórych sytuacjach może być lepiej, ale nie w celu uniknięcia powolnej wydajności Xcode.
Gabe Rainbow

Odpowiedzi:

161

Jeśli wyczyścisz plik obszaru roboczego, pomoże to przyspieszyć.

Najpierw upewnij się, że Xcode nie jest otwarty. Teraz znajdź plik projektu. Kliknij go prawym przyciskiem myszy i wybierz Show Package Contents.

wprowadź opis obrazu tutaj

Następnie usuń project.xcworkspace.

wprowadź opis obrazu tutaj

Otwórz Xcode i ciesz się szybszą wydajnością!

Podziękowania dla: http://meachware.blogspot.com/2011/06/speed-up-xcode-4.html


Edycja: otrzymałem kilka komentarzy na ten temat, zauważając, że w przypadku niektórych projektów może to powodować problemy. Przed wykonaniem tych czynności upewnij się, że masz kopię zapasową projektu, a następnie nie zapomnij sprawdzić i przetestować projektu . Upewnij się, że nadal masz wszystkie pliki wykonywalne i schematy.

sudo rm -rf
źródło
usunięcie obszaru roboczego pomogło w rozwiązaniu problemu, ale nie sądzę, że naprawdę potrzebujesz tego apletu heheh
Vincent Bacalso
3
Wow - rwałam włosy z głowy przez ciągłe balowanie na plaży, a teraz biegają jak sen. Dzięki za absolutnie niezbędną wskazówkę. Warto wspomnieć, że tymczasowo resetuje układ okna (co może być oczywiste lub nie), ale jest to niewielka cena do zapłacenia. Ponadto, jeśli ludzie chcą ręcznie usunąć plik obszaru roboczego, mogą kliknąć ich plik xcodeproj z naciśniętym klawiszem Control, wybrać opcję „pokaż zawartość pakietu”, a następnie usunąć lub przenieść plik .xcworkspace.
Erik Asmussen
11
@sudo Niesamowite, ale teraz straciłem wymówkę dotyczącą wydajności i nie mogę kupić sobie nowego, szybszego MBP!?!
Daniel Blezek,
Mam podobne problemy z wydajnością. Jedną rzeczą, którą widzę w małym okienku stanu w górnej środkowej części okna, jest komunikat o treści „Indeksowanie | przetworzono plik 0 z 1” (liczby to tylko przykłady). Czy to też mogło wpłynąć na powolną wydajność?
milesmeow
3
To ZŁA rada - katalog xcworkspace zawiera niektóre z podstawowych plików twojego projektu. W bardzo prostym projekcie tych plików będzie brakować i będzie dobrze, dlatego prawdopodobnie jeszcze nie zdawałeś sobie z tego sprawy. W przypadku złożonych projektów - np. Z udostępnionymi plikami wykonywalnymi, udostępnionymi schematami itp. - uszkodzisz swój projekt. patrz pytanie .gitignore, aby dowiedzieć się, które pliki w xcworkspace można bezpiecznie usunąć - a które nie! stackoverflow.com/questions/49478/…
Adam
46

WAŻNA AKTUALIZACJA: Ścieżki zmienione dla Xcode 6 (dzięki za komentarz dcc)! Właśnie dodałem alternatywny sposób.


Jest jeszcze jedna fajna sztuczka, aby przyspieszyć kompilacje, tworząc dysk RAM z następującym wierszem kodu:

diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://8475854`

Tworzy to obraz dysku w pamięci o rozmiarze około 4 GB. Ale uważaj, musisz mieć wystarczająco dużo pamięci. Oczywiście możesz utworzyć mniejszy obraz, na przykład 2 GB (to będzie 4237927).

Następnie mówisz Xcode, aby przechowywał tam wyprowadzone dane wprowadź opis obrazu tutaj

Nie możesz powiedzieć Xcode, aby przechowywał tam dane iPhone Simulator bezpośrednio, ale możesz utworzyć folder na ramdysku i utworzyć łącze symboliczne zamiast katalogu iPhone Simulator, wykonując następujące czynności:

Xcode 6:

cd /Volumes/ramdisk
mkdir CoreSimulator
rm -R ~/Library/Developer/CoreSimulator
ln -s /Volumes/ramdisk/CoreSimulator ~/Library/Developer/CoreSimulator

Starsze wersje Xcode:

cd /Volumes/ramdisk
mkdir iPhone\ Simulator
rm -R ~/Library/Application\ Support/iPhone\ Simulator
ln -s /Volumes/ramdisk/iPhone\ Simulator ~/Library/Application\ Support/iPhone\ Simulator

Jeśli zbuduję dla symulatora z taką konfiguracją, będzie gotowy do pracy w mgnieniu oka :)

Należy pamiętać, że dysk RAM zniknie po ponownym uruchomieniu komputera, więc dobrym pomysłem może być utworzenie skryptu lub czegoś, co działa podczas uruchamiania. I NIE UMIESZCZAJ ŻADNYCH DANYCH, KTÓRE CHCESZ ZACHOWAĆ !!!

AKTUALIZACJA 2013-03-12:

  1. Przeczytaj komentarz Francisco Garcia poniżej!

  2. Z moim nowym MBP (zawierającym dysk SSD) nie potrzebuję już tej metody. Xcode działa jak diabli :). Mam nadzieję, że nie jest to postrzegane jako reklama dla wielkiego koncernu owocowego, to tylko raport z doświadczeń ...

benjamin.ludwig
źródło
2
o rany ... ten jest naprawdę świetny. ale WAŻNE: to usunie twoje coredata z symulatora ... stracisz wszystkie wyniki testów, które wykonałeś do tej pory. więc dzięki za znacznie szybszą kompilację, ale ostrzeżenie byłoby miłe =)
Sebastian Flückiger
2
dla każdego, kto to robi, po prostu pamiętaj, że JEST JEDNA RZECZ, KTÓRE CHCESZ ZACHOWAĆ w swoim folderze danych pochodnych, pliku symboli. Po wdrożeniu aplikacji będziesz chciał przechowywać w bezpiecznym miejscu jej plik symboli na wypadek, gdybyś chciał debugować za pomocą raportu o awarii
SystematicFrank
1
@FranciscoGarcia Jeśli wdrożysz aplikację za pośrednictwem organizatora xcode poprzez archiwizację, pliki dSYM zostaną umieszczone w archiwum. Jest on przechowywany poza folderem danych pochodnych (przynajmniej znajduje się w bieżącej wersji xcode - 4.6)
Danny Parker
1
@imcaptor Możesz użyć Automatora do stworzenia programu, który wykonuje skrypt. W preferencjach systemowych przejdź do Użytkownicy i grupy -> Elementy logowania i dodaj ten program. Założę się, że jest łatwiejszy sposób, ale ten działa
benjamin.ludwig
1
Ścieżka ~ / Library / Application \ Support / iPhone \ Simulator nie wydaje się już być poprawna. Proszę zaktualizować.
davidcondrey
9

Wyłączenie problemów na żywo w preferencjach ogólnych spowodowało zdecydowaną różnicę. Konfiguruję również schemat bez włączonego gdb w sytuacjach, w których często uruchamiam ponownie (żaden gdb nie przyspiesza nieco uruchamiania).

greg
źródło
7

Dla mnie Xcode zyskał ogromny wzrost wydajności po ustawieniu go na działanie w trybie 32-bitowym (domyślnie było to 64). Jest prawie tak szybki, jak stary Xcode 3. Możesz przełączyć się na 32-bitowy, klikając prawym przyciskiem myszy aplikację (w /Developer/Applications/XCode.app ) i wybierając Pobierz informacje i zaznaczając Otwórz w trybie 32-bitowym .

gyozo kudor
źródło
Nie zrobiło to dla mnie żadnej różnicy w moim MBP 2.2Ghz i7 w 10.6.8. Jaki masz komputer / system operacyjny?
ettore
Mam Maca Mini z 2,26 GHz Intel Core 2 Duo, 10.6.8, 2 GB pamięci.
gyozo kudor
7

Xcode 4.2, 4.3:

Poważne problemy z indeksatorem plików (ten sam kod, w którym działa Spotlight, który zawiera błędy od lat? Prawdopodobnie).

Wyłącz wszystko, co nie jest istotne, co jest związane z „oglądaniem” plików:

  1. Szybka pomoc (uwaga: nigdy nie klikaj karty QH! Nawet ukrycie Asystenta nadal powoduje uruchomienie kodu! Przełącz się na inną kartę przed przejściem do nowego pliku ...)
  2. Zarządzanie SCM (SVN, Git itp. - obsługa git w Xcode jest nadal trochę błędna (może uszkodzić projekty), a oni porzucili obsługę SVN, więc i tak nie powinieneś jej używać!)
  3. spróbuj usunąć folder obszaru roboczego (zgodnie z zaakceptowaną odpowiedzią), ale tylko wtedy, gdy jest duży na dysku
  4. ... wszystko, co można znaleźć w związku ze stanem poszczególnych plików

Xcode 4.4, 4.5:

Te wersje mają poważny wyciek pamięci, zepsuty indeksator plików (ale lepszy niż 4.2 i 4.3) i być może problem z prywatnym plikiem wymiany.

Ostatecznie, wyłączając / włączając przestrzeń wymiany ( jak wyłączyć lub włączyć zamianę w systemie Mac OS X ) i używając normalnych dysków twardych na kilku komputerach oraz przeprowadzając eksperymenty na maszynach z 2 GB RAM do 16 GB RAM, stwierdziłem, że Xcode wydaje się uruchamiać własną przestrzeń wymiany, niezależnie od wymiany systemu OS X (!).

(to może być błąd - może istnieje dodatkowa forma wymiany OS X, o której nie wiem - ale pliki wymiany systemu nie były większe ani mniejsze, podczas gdy miejsce na dysku przeskoczyło o gigabajty w górę iw dół na niektórych komputerach)

Zauważony:

  1. Xcode 4.4 / 4.5 losowo pobierze całą pamięć RAM w systemie (10 GB dla małego projektu), aby reszta systemu zatrzymała się, czekając na zamianę dysku

    1. Gorzej: na Macbookach z dyskami SSD nie wiesz, że to się stało
    2. NAJGORSZE: ... nawet jeśli prawdopodobnie uszkadza twój dysk twardy (dyski SSD nie lubią potrząsanych zapisów)
  2. Xcode zablokuje dostęp do dysku twardego, aby mógł wykonać (zepsute) wewnętrzne indeksowanie plików. Kiedy zaczyna brakować pamięci systemowej i OS X musi dokonać wymiany ... utknie w oczekiwaniu na indeksowanie plików przez Xcode ... a Xcode zajmuje więcej pamięci podczas oczekiwania ... i: BUM! w mniejszych systemach OS X w końcu się zawiesza

  3. Xcode nie potrzebuje przestrzeni wymiany OS X.

Ten ostatni jest bardzo interesujący. Jeśli masz dużo pamięci (np. 16 GB), spróbuj trwale wyłączyć przestrzeń wymiany. Xcode działa szybciej, ponieważ OS X Lion ma pewne błędy w zarządzaniu memami, gdzie zamienia się nawet wtedy, gdy nie jest to konieczne .

Jeśli xcode nagle zwolni, zamienia się wewnętrznie, w którym to momencie możesz go po prostu zabić i ponownie uruchomić.

(jeśli masz dysk SSD, jedynym sposobem, aby dowiedzieć się, czy zaczęła się jego wymiana, jest zaczekanie, aż „zwolni”. W przeciwnym razie wiesz, gdy tylko usłyszysz thrash HD: nie ma już pliku wymiany systemu, więc jedyną możliwą przyczyną jest Xcode)

Możesz bezpiecznie wyłączyć zamianę, nawet jeśli masz 2 GB pamięci RAM (miałem tylko jedną awarię OS X na miesiąc, kiedy to wypróbowałem, uruchamiałem to w ten sposób przez rok), ale powstrzyma cię to przed pracą z wysokiej klasy wideo / grafiką z plikami które potrzebują wielu gigabajtów tylko do działania. Wypróbuj go przez kilka tygodni i zobacz, co się stanie.

Ale ... ponowne uruchomienie Xcode za każdym razem, gdy zwolni, działa cuda. Na maszynach z mniejszą ilością pamięci RAM, prywatny plik wymiany Xcode wydaje się być NATYCHMIAST usuwany po zamknięciu (nie wydaje się, aby miało to miejsce na maszynach z dużą ilością pamięci RAM)

Adam
źródło
4

Żadna z tych odpowiedzi naprawdę nie poprawiła wydajności w moim przypadku (z czasem Xcode 4.1 stał się prawie nieużyteczny, tylko opuszczenie go od czasu do czasu pomogło).

Jednak właśnie się dowiedziałem, że jeśli ciągle zamykam wszystkie moje dokumenty (sterowanie-rozkaz-W), wydaje się, że działa szybko. Xcode automatycznie zachowuje wszystkie kliknięte dokumenty w pamięci w jakiś sposób i możesz nawigować między nimi za pomocą strzałki w lewo / w prawo z klawiszem Ctrl. Jeśli przypadkowo otworzysz zbyt wiele (szczególnie okien IB), czołganie się zatrzymuje. Samo zamknięcie wszystkich otwartych dokumentów od czasu do czasu wydaje się złagodzić ten problem bez konieczności wykonywania pełnego restartu.

Kutas
źródło
2

Każdy, kto ma takie problemy, powinien wypróbować Xcode 4.1 w systemie Mac OS X Lion. Dziwię się, jak bardzo szybszy i responsywny jest na tym samym sprzęcie (tutaj Macbook Pro 2,66 GHz Core 2 Duo z 4 GB pamięci RAM).

Przypuszczam, że w tym wydaniu naprawili mnóstwo błędów wydajnościowych.

Ricardo Sanchez-Saez
źródło
2
Wciąż wolno mi na podobnej konfiguracji. (Xcode 4.1 i Mac OSX Lion na MacBooku 2,26 GHz Intel Core 2 Duo, 2 GB RAM)
Andrei,
1

Uruchom Instruments z szablonem profilu czasowego i dołącz go do działającego Xcode (lub clang, llvm itp., Jeśli problem występuje podczas kompilacji). Powinieneś dość szybko zobaczyć problem. Widziałem bardzo różne przyczyny na różnych komputerach. Kontrola wersji jest często winowajcą.

quellish
źródło
1

Mam te same problemy. Zostały częściowo naprawione, ponieważ wersje beta są nadal trwałe. Wygląda na to, że Xcode wewnętrznie ma jeden lub więcej wycieków, które unoszą twoją pamięć. Możesz bardzo dobrze oglądać tę fajną „funkcję”, używając zintegrowanego programu Interface-Builder. Dwa możliwe rozwiązania poniżej modlenia się i wypełniania raportów o błędach do Apple:

  1. Nie używaj wewnętrznego Buildera, zamiast tego uruchom aplikację zewnętrzną.
  2. Od czasu do czasu zamykaj Xcode, powinno to zwolnić pamięć, która wyciekła.
Tim Specht
źródło
Mam zupełnie nowego iMaca z połowy 2011 r., 3,1 i5, 12 GB Ram + 1 GB pamięci graficznej, problemy nie przeszkadzają mi tutaj zbytnio, ale zanim go kupiłem, opracowałem na MacBooku, po prostu zrób sobie pracę maszyna, jest warta swojej ceny, zaufaj mi :)
Tim Specht
0

Wypróbowałem prawie wszystko, co zostało zasugerowane w tym wątku i [wielu] innych, a jedyną rzeczą, która działała, było „wyłączenie” subversion dla projektu. Oto kiepska część - JEDYNYM sposobem, w jaki mogłem "wyłączyć" wbudowaną wtyczkę SVN, było sfałszowanie mojego pliku / etc / hosts fałszywym adresem IP, co w efekcie spowodowało niepowodzenie dostępu do SVN.

Próbowałem usunąć / zmienić nazwę IDESubversion.ideplugin w / Developer / Library / Xcode / PrivatePlugIns, ale Xcode 4.2.1 wymiotuje i odmawia uruchomienia.

Próbowałem usunąć moje repozytoria SVN z Xcode za każdym razem, gdy ponownie uruchamiam Xcode, ale Xcode ulega awarii w ciągu kilku minut.

Próbowałem wyłączyć "Status zdalny" poprzez Plik-> Kontrola źródła-> Ukryj status zdalny (nic nie zrobiłem dla mnie).

Teraz, gdy ustawiłem nazwę hosta SVN na 1.2.3.4 w moim pliku hosts, Xcode działa świetnie i nie pokazuje SBBOD prawie za każdym razem, gdy przełączam się między plikami.

$ grep 1.2.3.4 /etc/hosts
1.2.3.4 svn.myhost.com

Następnie, kiedy naprawdę chcę zrobić kontrolę wersji, muszę usunąć plik hosts i użyć polecenia cmd line svn.

DustinB
źródło
Spróbuj zmienić nazwę folderu /Applications/Xcode.app/Contents/PlugIns/IDESubversion.ideplugin na coś z innym zakończeniem. Użyłem podobnej sztuczki, aby wyłączyć wtyczkę Git.
John McFarlane,
0

Możesz uniknąć indeksowania Xcode. Takie postępowanie poprawi wydajność pamięci w systemie, ale także uniemożliwi działanie funkcji IDE, takich jak autouzupełnianie i przeskakiwanie do definicji.

$ defaults write com.apple.dt.XCode IDEIndexDisable 1
davidcondrey
źródło
0

Jeśli masz niską wydajność podczas modyfikowania pliku .xib za pomocą konstruktora / edytora interfejsu, przejdź do Inspektora plików dla .xib i wyłącz automatyczne układanie . Wprowadź zmiany w pliku .xib, a następnie jako ostatni krok włącz ponownie układ automatyczny i dodaj lub dostosuj ograniczenia.

iskrzący
źródło
0

W końcu mój Xcode działał normalnie, wyłączając funkcję git.

Emmy
źródło
0

W moim przypadku było to użycie pamięci RAM.

wprowadź opis obrazu tutaj

Spróbuj zabić kilka kart Chrome lub rzadko używanych aplikacji.

Maciek Czarnik
źródło
0

Znalazłem sztuczkę, aby przyspieszyć kompilację XCode 4: Kiedy uruchamiasz, kompilujesz lub wykonujesz jakiekolwiek inne przetwarzanie w Xcode i zatrzymuje się on na aktywnym monitorze, wybierz proces Xcode, a następnie kliknij przykładowy proces. Spowoduje to odblokowanie procesu i ponowne uruchomienie normalnie, co pozwoli na zbudowanie aplikacji w rozsądnym czasie.

william pagnon
źródło