Perlの代替として(12)

バッファつき入出力

こう書くと速いらしい。


import std.stream;
import std.cstream;
import std.conv;

import std.date;
import std.process;

void main(char[][] args) {
d_time starttime = getUTCtime();

long sum = 0L;

Stream istream = new BufferedFile(args[1]);
char[] line;
while(!istream.eof()) {
line = istream.readLine();
sum += toLong(line);
}
istream.close();

derr.writefln("%.3fs",
cast(double)(getUTCtime() - starttime) / TicksPerSecond);

dout.writefln("sum : %d", sum);
}

D : 20.234s
Perl : 2.750s
D(今回) : 0.765s

お、速くなったね。
こうすると7行が3行で書けるよ。


foreach(char[] line; new BufferedFile(args[1])) {
sum += toLong(line);
}

D : 20.234s
Perl : 2.750s
D(今回) : 0.765s
D(今回2) : 0.188s

ええっと、すごく速いね。


出力は次のよう。


import std.stream;
import std.cstream;

import std.date;
import std.process;

const int n = cast(int)1e6;

void main(char[][] args) {
d_time starttime = getUTCtime();

Stream ostream = new BufferedFile(args[1], FileMode.Out);
for(int i = 0; i < n; i++)
ostream.writefln("%d", i);
ostream.close();

derr.writefln("%.3fs",
cast(double)(getUTCtime() - starttime) / TicksPerSecond);
}

D : 24.516s
Perl : 1.313s
D(今回) : 0.938s