Stworzyłem popularny program WinForm w języku C#, który ma wiele widżetów GUI, i odkryłem, że gdy celem platformy jest x64, uruchomienie jest około 5-10 razy wolniejsze niż x86. Pod celem x64 uruchomienie systemu zajmuje około 5 sekund, co negatywnie wpływa na wygodę użytkownika. Chciałbym zrobić to szybciej.Uruchomienie programu WinForm 10x wolniej pod x64 względem x86
Próbowałem również z innym programem, a także czas uruchamiania pod x64 był podwójny lub potrójny od x86.
Więc zacząłem się zastanawiać, co było przyczyną. Moje programy używają sporej ilości widżetów, więc aby przetestować teorię, postanowiłem stworzyć projekt testowy z 800 przyciskami! Ustawiłem je wszystkie na Visible=False
, aby prędkość odświeżania/odświeżania nie zabłagała wody.
Ku memu zdumieniu 64 rozpoczęła się o wiele wolniej niż równowartość x86. Następnie przejrzałem sekcję InitializeComponent();
i na pewno wersja x64 działała około 3,5 sekundy. Z drugiej strony x86 zajęło tylko około 0.275 sekund. To prawie 13 razy szybciej!
.NET Framework 2.0, 3.0 i 3.5 są równie złe. Kierowanie .NET 4 & 4.5 pod x64 jest znacznie lepsza około 0,8 sekundy, ale nadal jest około 3 razy wolniejsza (x86 jest tak dobra na 0,28 sekundy), a ja chcę używać .NET 3.5 dla zwiększonej bazy użytkowników.
Moje pytanie brzmi: co powoduje, że wersja x64 uruchamia się tak wolno i jak mogę ją przyspieszyć, aby była porównywalna z wersją x86?
Jeśli ktoś chce natychmiast sprawdzić, jakie stworzył zip z projektu VS 2010, który można pobrać tutaj: http://www.skytopia.com/stuff/64_vs_32bit_Startup_Speed.zip
Jedną z różnic wydajności między 32 a 64 bitami jest to, że 64 JITter potrzebuje więcej czasu na kompilację (ale daje lepszy kod). Uważam jednak za bardzo mało prawdopodobne, że twój kod jest ograniczony przez wydajność JIT, więc nie powinno to być przyczyną problemu z wydajnością. Nowy RyuJIT poprawia 64-bitowy czas JIT, ale produkuje gorszy kod niż obecny 64-bitowy JITter. – CodesInChaos
@CodesInChaos: Interesujące. Jestem zdeterminowany, aby dojść do sedna tego. Jest bardzo powtarzalny i ma duży wpływ na tak wielu użytkowników i programistów. –
Kierowanie .net 4.5 zamiast 3.5 poprawia wydajność z 2,0 do 1,3 na moim komputerze. – CodesInChaos