A significant performance difference
    bearophile via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon Sep  1 01:53:45 PDT 2014
    
    
  
ketmar:
Thank you for your analysis and code.
>         while (x.length) {
>           foreach (key; x.keys) {
>             auto pp = key in x;
>             if (pp is null) continue;
>             j = key;
>             p = *pp;
>             x.remove(j);
This is a little cleaner:
         while (x.length) {
             foreach (immutable j; x.keys) {
                 p = x[j];
                 x.remove(j);
> so yes, creating delegates are SLOW. even taking into account
> that we creating dynamic arrays with keys in this version, it's 
> rockin' fast.
This D version is much faster, it runs in about 0.26 seconds 
(while the C++ version runs in about 0.21 seconds), this is 
acceptable because x.keys allocates a dynamic array of keys in 
the middle of the code.
But I think the "j = x.byKey.front;  p = x.byValue.front;" code 
looks sufficiently idiomatic, and its performance is terrible. It 
seems fit for a performance bug report. I have to create a 
synthetic benchmark that shows just the problem.
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list