2014-11-18 16 views
11

Używam interaktywnego programu, który wyprowadza około 10 MB [edytuj: prawdopodobnie bliżej do 100 MB] tekstu ASCII. Wydajność w trybie powłoki emacs (Aquamacs) jest niedopuszczalnie powolna, co wymaga wielu godzin. Zrobiłem buforowanie-wyłączanie-cofanie, które przyspiesza działanie, ale wciąż jest zbyt wolne.Szybki tryb powłoki emacs?

Próbowałem uruchomić program z ukrytym oknem bufora, ale program się zakończył i kiedy ponownie wybrałem bufor, wciąż muszę czekać godziny, aż dane wyjściowe będą się wyświetlać.

Czy jest jakieś polecenie, które mogę podać emacs, aby wydajność była akceptowalna? Nie rozumiem, jak to jest możliwe, aby tryb powłoki był tak powolny: jest to maszyna wielordzeniowa o pojemności 32 GB z 64-bitowymi nowoczesnymi procesorami wielordzeniowymi i dyskami SSD.

+1

Czy możesz podać szczegóły swojej sytuacji, a przede wszystkim, jak dokładnie działa ten program? Na przykład. przez 'M-x compile' lub w buforze' M-x shell' lub ...? – Stefan

+0

Tworzę bufor z powłoką M-x. Wykonuję bufor - wyłącz i cofaj w tym buforze. Uruchomiłem lldb wewnątrz bufora, a wewnątrz lldb uruchom mój program. Wydaje się dużo drukować, ponieważ jest w fazie rozwoju i lubię monitorować wyniki; to także dlatego powinien być interaktywny. Jest to powszechny normalny sposób rozwijania się w emacs - jest to jedna z zalet trybu powłoki, nie potrzebujesz osobnych plików dziennika przez cały czas. Wszystko byłoby w porządku, poza tym, że emacs biegnie śmiesznie, śmiesznie wolno. – kdog

Odpowiedz

1

Ustaw zmienne comint-move-point-for-output i comint-scroll-show-maximum-output na nil. Zapobiega to ciągłemu przewijaniu bufora do końca wyjścia, co wymaga częstych powtórnych wyświetleń.

+0

Nie próbowałem tego jeszcze, nie jestem pewien, czy powinienem podczas drukowania danych wyjściowych. Jednak wynik jest powolny, nawet jeśli okno bufora nie pokazuje końca wyjścia. Na przykład teraz bufor pokazuje, że mam około 2 000 000 linii, a dane wyjściowe są buforowane z około 2 200 000 linii. Wszystko, co widzę, to wskazanie paska przewijania powoli przesuwające się w górę. Nic nie jest wyświetlane ponownie. Chociaż może wyjście jest bliższe 50MB niż 10 MB na to, co jest warte. – kdog

+0

W takim przypadku myślę, że robisz najlepiej, jak potrafisz. Musi zajmować się danymi wyjściowymi, aby mógł aktualizować pasek przewijania i procent linii w trybie. Myślę, że istnieje zmienna, która mówi maksymalny rozmiar bufora do wyświetlenia pozycji i procent w linii trybu, ale nie pamiętam, co to jest. – Barmar

+3

Dzięki. To frustrujące dla mnie, że opiekunowie emacsa wydają się spędzać cały swój czas na idiotycznych funkcjach, których nikt nie chce ani nie potrzebuje, takich jak przeglądanie stron internetowych i podstawowe narzędzia, z których ludzie używają emacsa (programowanie) są błędne lub niestabilne. Nadal nie ma przyzwoitego trybu C++, na przykład, tylko 50 różnych pakietów, które są niemożliwe do zainstalowania i faktycznie nie działają (według mojego doświadczenia). Jeśli chcą umieścić w przeglądarce internetowej, dobrze, ale PIERWSZY uzyskać podstawowe rzeczy pracy: przeglądanie kodu, programowanie itp. – kdog

1

Czy Twój interaktywny program działa w trybie powłoki jako skrypt powłoki?

Czy możliwe jest rozwidlenie procesu powłoki bezpośrednio do powłoki (nie tryb powłoki w emacs), a następnie emacs po prostu załadować wyniki po zakończeniu?

+2

Zobacz poprzedni komentarz. Zawsze mogłem przepisać mój program, aby obejść problemy emacs, ale wolałbym nie. Spodziewałbym się, że po 30 lub 40 latach rozwoju, emacs będzie w stanie zrobić dość szybki tryb powłoki. – kdog