8
31
2015
0

加快C#中Console类的读写速度


Console类的读写速度真是不忍直视啊。。

事情要从一道Codeforces上的题目说起,我自认为代码实现没有问题,但一直在第6个点上TLE,于是我想到是读取太慢了。

我当时是写了一个对于各种类型都通用的泛型方法:逐行读进来并按空格分隔,然后(T)Convert.ChangeType(item, typeof(T))。item是分隔后的各个字符串,T是要转成的类型。

这显然是在作死。

先不考虑Console类的速度,单是object类型的参数和返回值造成的装/拆箱就严重拖慢了速度。而且BCL中的类型转换方法因为要考虑各种情况,也会影响速度。

因为从Console读进来的内容大多只有数字和字符串,我决定不再作死,写一个OI中常用的快速读入函数。

这回好了一些,但还是在第30个点TLE了。

参考了一下某神犇的程序,发现可以通过手动指定缓冲区大小来提速。

这是最终版的程序。

把Console的读写重定向到一个流的时候可以指定缓冲区的大小,这回总算是AC了,速度还要比被参考的那位神犇的程序快1/2。

要注意的一点是Main方法结尾一定要调用writer.Flush()把缓冲区的内容都写入流。

Category: C#及OOP | Tags: BCL | Read Count: 345

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com