我需要从控制台的标准输入流快速读取数据.输入包含100.000行,每行20个字符(200万个字符); 用户从剪贴板粘贴它.我的程序工作约3分钟(非常慢;目标是10秒).它看起来像:
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...
Run Code Online (Sandbox Code Playgroud)
我尝试了什么:
直接: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, …Run Code Online (Sandbox Code Playgroud)