C#StdIn / StdOut Performance
发布时间:2020-12-16 06:54:40 所属栏目:百科 来源:网络整理
导读:我正在启动一个进程并通过stdin将一个intruction xml文件写入目标进程.只有2k的数据,但传输那么多数据需要将近半秒,这对我来说似乎太过分了.我测量的是子进程使用数据所花费的时间. 有关如何加快速度的任何建议吗? 家长流程: ProcessStartInfo psi = new P
我正在启动一个进程并通过stdin将一个intruction xml文件写入目标进程.只有2k的数据,但传输那么多数据需要将近半秒,这对我来说似乎太过分了.我测量的是子进程使用数据所花费的时间.
有关如何加快速度的任何建议吗? 家长流程: 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); 第二次编辑:在这种情况下,产生线程是不可能的.由于超出此问题范围的原因,我需要每个人都有自己的内存空间(限制为32位2gb). 解决方法
除了没有读/写数据之外你有没有尝试过同样的事情? IE浏览器.衡量你的父程序启动孩子的时间,让它准备好运行,运行和退出吗?
由于你的’子’代码看起来也像C#,它可能是加载你的子exe库,启动.Net运行时等的开销,花费0.5秒,而不是写入/读取你的数据. 也就是说,在Windows上启动新进程并不便宜(至少不像大多数* nix变体那样).如果你担心这里的时间,你可能想看看使用线程而不是进程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |