小编Mar*_*dik的帖子

快速读取控制台输入

我需要从控制台的标准输入流快速读取数据.输入包含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)

我尝试了什么:

  1. 直接:Console.Read,Console.ReadKey - 相同的结果

  2. Console.In:Read(),ReadLine(),ReadAsync(),ReadLineAsync(),ReadBlock(具有各种块大小),ReadBlockAsync(),ReadToEnd(),ReadToEndAsync()- 相同的结果

  3. 新的StreamReader(Console.OpenStandardInput(缓冲区))具有各种缓冲区和块大小- 相同的结果

  4. 在读取开始时隐藏控制台窗口,并在读取完成时显示- 加速10%

  5. 我尝试从文件中获取输入数据 - 它的工作完美而快速.但我需要从__ConsoleStream中读取.

我注意到,当输入读取正在进行时 - 进程conhost.exe主动使用处理器.

如何加快输入读数?

UPD:

  1. 增加/减少Console.BufferHeight和Console.BufferWidth无效

  2. ReadFile msdn也慢慢来.但我注意到一个有趣的事实:

    ReadFile(handle, buffer, …
    Run Code Online (Sandbox Code Playgroud)

.net c# console input stream

13
推荐指数
1
解决办法
2151
查看次数

标签 统计

.net ×1

c# ×1

console ×1

input ×1

stream ×1