I'm playing around with the range based operations and with raw file io. I couldn't figure out a way to get rid of the outer foreach loops.

Nice execution time of 537 msec for this, which creates and reads back a file of about 160MB (20_000_000 doubles).


import std.algorithm;
import std.stdio;
import std.conv;
import std.math;
import std.range;
import std.file;
import std.datetime;
import std.array;

void main()
{

        auto fn = "numberList.db";
        auto f = File(fn,"wb");
        scope(exit) std.file.remove(fn);
        std.datetime.StopWatch sw;
        sw.start();
        
        foreach(elem; chunks(iota(10.5,20_000_010.5,1.0),1000000)){
                f.rawWrite(elem.array());
        }
        f.close();
        f = File(fn,"rb");

        const int n = 1000000;
        double dbv[] = new double[n];
        foreach(i; iota(10,20_000_000+10,n)){
                f.rawRead!(double)(dbv);
        }

        f.close();
        long tm = sw.peek().msecs;
        writeln("time msecs:", tm);

}

Reply via email to