I don't have time now to do the optimization for you now, sorry.

I have improved your code a little, but I don't know the
performance of this compared to the C# code:
http://dpaste.dzfl.pl/0dab53bf85ad

I compile and run it with ldc2 with:

ldmd2 -wi -O -release -inline -noboundscheck -run test.d

------------------------


A second version uses a struct:

struct Student {
    string name;
    Date birthday;
    int evaluation;

    string getState() {
        return name ~
               "'s birthday " ~
               birthday.toSimpleString ~
               " and his evaluation is " ~
               evaluation.text;
    }
}

void bench() {
    Student* michael;

    foreach (immutable count; 0 .. 1_000_000) {
        michael = new Student("Michael", Date(1998, 5, 1), 12);
        michael.name = "Joseph" ~ count.text;
    }
    michael.getState.writeln;
}


A third version allocates the struct on the stack:

void bench() {
    Student michael;

    foreach (immutable count; 0 .. 1_000_000) {
        michael = Student("Michael", Date(1998, 5, 1), 12);
        michael.name = "Joseph" ~ count.text;
    }

    michael.getState.writeln;
}


The timings I'm seeing:

Joseph999999's birthday 1998-May-01 and his evaluation is 12
Execution time : 651 ms

Joseph999999's birthday 1998-May-01 and his evaluation is 12
Execution time : 563 ms

Joseph999999's birthday 1998-May-01 and his evaluation is 12
Execution time: 440 ms.

Bye,
bearophile

Reply via email to