加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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变体那样).如果你担心这里的时间,你可能想看看使用线程而不是进程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读