Indeed, time and again, "testing is believing".

I tried a simple line splitting program in D with and without memory mapping against a 140MB file. The program just reads the entire file and does some simple string processing on it.

The loop pattern looks like this:

    foreach (line; byLineDirect(stdin))
    {
        auto r = splitter(line, "|||");
        write(r.head, ":");
        r.next;
        writeln(r.head);
    }

The byLineDirect returns a range that uses memory mapped files when possible, or simple fread calls otherwise.

The memory-mapped version takes 2.15 seconds on average. I was fighting against Perl's equivalent 2.45. At some point I decided to try without memory mapping and I consistently got 1.75 seconds. What the heck is going on? When does memory mapping actually help?


Andrei

Reply via email to