Я запускаю процесс и записываю XML-файл целой последовательности в процесс назначения через stdin. Существует всего 2 тыс. Данных, но для передачи большого количества данных требуется почти полсекунды, что для меня слишком много. То, что я измеряю, - это время, затрачиваемое дочерним процессом на использование данных.C# StdIn/StdOut Performance
Любые предложения относительно того, как ускорить это?
процесс Родитель:
ProcessStartInfo psi = new ProcessStartInfo(path, args);
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardInput = true;
Process p = Process.Start(psi);
p.StandardInput.Write(stdin);
p.StandardInput.Close();
Детский процесс:
Stream s = Console.OpenStandardInput();
StreamReader sr = new StreamReader(s);
return sr.ReadToEnd();
Для записи, я сделал попробовать одно изменение, где я написал длину данных первого и прочитать, что точное количество байтов назад, чтобы избежать ожидания закрытия потока, но это никак не повлияло на производительность.
Я рождаю много маленьких рабочих процессов, поэтому дополнительные 0,5 секунды на одного работника убивают меня!
Редактировать: Я ценю все комментарии, но я специально ищу любой способ улучшить производительность stdin. В .5s я уже упоминал, что измеряется вокруг кода дочернего процесса:
Stopwatch sw = new Stopwatch();
sw.Reset();
sw.Start();
string stdin = ReadStdIn();
sw.Stop();
Console.WriteLine("Elapsed time to read stdin: " + sw.ElapsedMilliseconds);
второй Edit: В этом случае, нерестовые потоки не возможность. По причинам, выходящим за рамки этого вопроса, мне нужно, чтобы каждая работа имела собственное пространство памяти (ограничено 32 бит 2 гб).
Вместо этого создайте небольшие рабочие потоки. –
Истериться больше зерлингов. – user318747