2013-05-16 8 views
5

Chcę utworzyć analizator składni dla wyjścia ffmpeg. Ale gdy uruchomiony ffmpeg właśnie tylko poprzezC# Process.Start() wolniej niż konsola

strCmdText = "-y -i \"" + path + "\""; 
strCmdText += " -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an nul.avi"; 
Process.Start(new ProcessStartInfo("lib\\ffmpeg.exe", strCmdText)); 

to 2/3 wolniejszy niż uruchamiając go w partii:

set FFMPEG="ffmpeg\ffmpeg.exe" 
%FFMPEG% -y -i %1 -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an -pass 1 nul.avi 

Running in C# ma FPS-szybkości 130 (CPU: 100%) , ale działając z partią ma 400 fps (CPU 75%).

W obu przypadkach pamięć RAM jest używana i jest taka sama, #Handels i #Threads też. Ustawienie priorytetu procesu na Wysoki/na żywo nie naprawi tego ani nie uruchomi procesu w osobnym wątku.

Czy to normalne, czy może być naprawione?

+0

Czy (lub ktoś inny) zdefiniowałeś powinowactwo procesora do procesu początkowego (lub dowolnego z jego procesów macierzystych)? Użyj Monitora procesu, aby dowiedzieć się, czy tak jest. Uruchomienie tylko na poziomie 75% może oznaczać, że proces wykorzystuje tylko 3/4 dostępnych rdzeni. –

+3

Wygląda na to, że różne argumenty przekazywane są do pliku wykonywalnego znajdującego się w różnych miejscach. Czy możesz dwukrotnie sprawdzić, czy argumenty są dokładnie takie same i czy używasz dokładnie tego samego pliku wykonywalnego? – oleksii

Odpowiedz

3

Podczas uruchamiania aplikacji przy użyciu Process.Start, w wierszu polecenia brakuje przełącznika -pass 1, co może mieć wpływ na dane wyjściowe.

AFAIK, prędkość & dane wyjściowe aplikacji uruchomionej za pośrednictwem Process.Start są takie same, jak w normalnych okolicznościach.

Może wystąpić zmiana wydajności o 1% lub 2%, ale wynika to głównie z cpu, powinowactwa procesu i rzeczy związanych z hardwardem.

+0

Obwiniaj mnie, masz rację. Po prostu tęskniłem. Teraz fps są prawie takie same. Dzięki. – gu471