2009-02-08 22 views
7

Rozważam umieszczenie IronPython jako języka skryptowego dla aplikacji, którą piszę. Aby go przetestować, pobrałem IronPython 2.0 i uruchomiłem interaktywny interpreter. Rozpoczynanie tego zajmuje około 5 sekund na moim Intel Quad Core z 6 gigabajtami pamięci. Trudno mi sobie wyobrazić, jak duże byłoby to opóźnienie dla mniej wydajnej maszyny.IronPython performance

Na podstawie these benchmarks wydaje się, że wydajność IronPython w rzeczywistości nie jest zbyt straszna. Albo to jest? Czy źle skonfigurowałem coś podczas instalacji? Czy jest to problem z interaktywnym tłumaczem?

Odpowiedz

13

Wyniki IronPython są naprawdę dobre. Wydajność związana z uruchomieniem ma związek ze środowiskiem wykonawczym .NET. Aplikacje .NET generalnie mają powolny czas uruchamiania, ponieważ wiele zestawów jest ładowanych, a niektóre z nich (przynajmniej niektóre klasy) są kompilowane w locie.

Jest to oczekiwane zachowanie w .NET. Rzeczywista wydajność środowiska wykonawczego jest znacznie lepsza. Nawet wydajność uruchamiania można poprawić, wstępnie kompilując zestaw IronPython i umieszczając kopię w pamięci podręcznej GAC: global assembly. Można to zrobić za pomocą gacutil.exe.

1

Czas uruchomienia i wydajność pracy nie są bezpośrednio powiązane. Aplety Java zyskały dużą popularność z powodu powolności nie dlatego, że aplet działał wolno, ale dlatego, że rozpoczęcie pracy trwało kilka minut. Jeśli robisz aplikację na komputer, martwię się o wydajność uruchamiania. Jeśli twój kod serwera, na którym działa zawsze, nie jest problemem.

4

Możesz również wstępnie skompilować bibliotekę standardową, która jest dołączona do IronPython, aby uzyskać znacznie lepszą wydajność uruchamiania. Istnieje próbka pyc.py, która może to zrobić.

+1

Po prostu próbowałem tego i otrzymuję nieznacznie _worse_ wydajność. Nie mam pojęcia dlaczego. – Cameron

2

liczby rdzeni nie zamierza dokonać wielkiej różnicy uruchomieniem perf :)

Uruchomienie jest szczególnie powolny na systemie operacyjnym 64-bitowej ze względu na różnice w wynikach pomiędzy 32-bitowych i 64-bitowych trema. Jeśli używasz 64-bitowego systemu operacyjnego, ale nie trzeba się proces 64-bitowe, spróbuj wykonać następujące czynności:

  1. kopię ipy.exe do ipy32.exe
  2. użytkowania corflags.exe z Windows SDK do oznaczyć ipy32.exe jako 32-bitowy plik wykonywalny , mówiąc "corflags /32bit + ipy32.exe".

Wersja 32-bitowa powinna zapewniać znacznie lepsze uruchamianie - choć w przybliżeniu tak bliska jak rozruch CPython. Ale to jest coś, nad czym wciąż pracujemy.

1

Poprawiono czas uruchamiania interpretera w kodzie IronPython w CodePlex. Mimo, że nadal widzę opóźnienia w porównaniu do CPython, istnieje znaczna poprawa.