var inputData = new string[100000]; // 100.000 rows with 20 chars for (int i = 0; i < 100000; i++) // Cycle duration is about 3 minutes... { inputData[i] = Console.ReadLine(); } // some processing...
我试过了什么
> Directly:Console.Read,Console.ReadKey – 相同的结果
> Console.In:Read(),ReadLine(),ReadAsync(),ReadLineAsync(),ReadBlock(具有各种块大小),ReadBlockAsync(),ReadToEnd(),ReadToEndAsync() – 相同的结果
>新的StreamReader(Console.OpenStandardInput(缓冲区)),具有各种缓冲区和块大小 – 相同的结果
>在阅读开始时隐藏控制台窗口,并在阅读完成后显示 – 加速度10%
>我尝试从文件获取输入数据 – 它的工作是完美和快速的.但是我需要从__ConsoleStream中读取.
我注意到,输入正在读取中 – 进程conhost.exe主动使用一个处理器.
如何加快输入的阅读速度?
UPD:
>增加/减少Console.BufferHeight和Console.BufferWidth没有影响
ReadFile msdn也慢慢.但是我注意到一个有趣的事实:
ReadFile(handle,buffer,bufferSize,out bytesCount,null); // bufferSize may be very big,but buffer obtains no more than one row (with \r\n). // So,it seems that data passed into InputStream row-by-row syncronIoUsly.
解决方法
>获取输入句柄:GetStdHandle msdn
>使用ReadFile(而不是ReadLine)读取22字节(带endline / n / r)msdn
WinApi在C#中使用的示例:http://www.pinvoke.net/
原文地址:https://www.jb51.cc/csharp/94757.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。