2016-09-22 11 views
9

Używam aplikacji elektronowej na pojedynczym komputerze z systemem Windows 7. Wydaje się, że za każdym razem, gdy wykonuję prawie dowolne operacje na plikach z biblioteką fs, procesor przyspiesza do ~ 100% dla procesu elektronowego i może zająć do minuty wykonywanie operacji wejścia/wyjścia pliku.Node.js Aplikacje elektronowe do jednordzeniowych maszyn z systemem Windows 7 działają powoli na plikach I/O

Jedną z funkcji szczególnie wolnych jest fs.readFileAsync(). Plik, który czytam, jest bardzo mały, ale wykonanie go zajmuje naprawdę dużo czasu.

Też uruchomiłem ten dokładny kod na Windows 7 z podwójnym rdzeniem, Windows 8.1, Windows 10 i Ubuntu 15.10, i żaden z tych systemów operacyjnych nie napotkał na ten problem, wydaje się, że to tylko jedno rdzeniowe maszyny z systemem Windows 7 . (Tak więc jestem prawie pozytywny, nie ma problemu z napisanym kodem).

Czy ktoś wie, dlaczego tak się mogło dziać? Czy istnieje rozwiązanie tego problemu? Wydaje się dziwne, że liczba rdzeni wpływa na wydajność aplikacji elektronowej. Znowu jest to tylko Windows 7, więc pojedyncze systemy Windows 8.1 lub Windows 10 nie wykazują takiego zachowania.

+0

Wydaje mi się, że mamy ten sam problem z 99% skokami procesora na jedno rdzeni maszyn wirtualnych systemu Windows Server 2012 R2. Będę zmieniał wszystkie 4 instancje, które mamy uruchomione do wielu rdzeni w kilka dni .. mam nadzieję, że rozwiąże to obecną prędkość ślimaka naszych aplikacji Electron. –

+0

Prawdopodobnie widzę podobny problem z kodem VS przy starcie (który jest oparty na elektronach). W moim przypadku użycie Menedżera zadań w celu zmniejszenia priorytetu procesu Code.exe, który zajmował blisko 100% CPU przez kilka godzin do Poniżej Normalnego, natychmiast "naprawił" problem i pozwolił rozpocząć kod VS. Robiąc to samo dla innego procesu Code.exe, który użył procesora znacznie mniej, nie zrobił nic. Sprawcą wydawał się być początkowy proces Code.exe. – eug

Odpowiedz

0

Electron nie radzi sobie z takim zadaniem w głównym procesie. Elektron nie jest również wielowątkowy.

Mimo że używasz pojedynczego rdzenia, polecam używanie "child_process" węzła do uruchamiania odczytu/zapisu pliku (lub dowolnego ciężkiego zadania) poza głównym procesem elektronu. To powinno rozwiązać każdą dziwną czkawkę lub zacina się w aplikacji i ogólnie przyspiesza to.

Należy również pamiętać, że elektron jest oparty na chromie, a węzeł oparty jest na v8, który jest rdzeniem chromu. Połączone rzeczy sprawiają, że elektron jest bardzo zasobożerny z natury, a jego działanie jest zwykle wadą elektronu. Plusem jest oczywiście możliwość szybkiego tworzenia aplikacji na różne platformy. Ogólnie rzecz biorąc, maszyna z rdzeniem prawdopodobnie nie jest odpowiednia do uruchomienia nawet aplikacji o 1 elektronach. W jakim celu nie mieliśmy jeszcze 1 podstawowych maszyn? 10 lat?

Powiązane problemy