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?
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. –
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