Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>No. I never updated it, but I think taken with appropriate grains of salt, the general advice and most rules of thumb in the article still hold up well today.</p> <p>(That said, it would be interesting to repeat the experiment today to see how primitive times have changed, how the generated code has changed, and how microprocessors have changed.)</p> <p>The relative overheads of most primitives won't have changed much, but some will have changed dramatically. For example, the mediocre performance of non-static delegate invoke was dramatically improved (in .NET 2.0, if I recall correctly). I would hate to think that a practitioner today would go out of her way to avoid delegate invoke because I reported it as very expensive in 2003.</p> <p>Since .NET 1.1, I would expect many compiled code sequences to have changed; there would be new JIT compiler optimizations (which doesn't show up so well in microbenchmarks); different mixes of JIT'd and NGEN'd code (and NGEN was not explored in my article); and key subsystems like the garbage collector have been continually tuned over the years.</p> <p>I reiterate my cautionary advice about the potential of memory system effects to drown out the costs of any number of individual managed code primitive operations -- and again note that a lot has changed. For example, a great deal of CLR performance work in 03-04 went into better working set behavior (such as minimizing dirty private pages) of NGEN'd system assemblies.</p> <p>Of course the theme of the article is the imperative to thoughtfully and vigilantly measure the performance of your code, and that theme is timeless.</p> <p>By the way, I always wanted to do a follow up article on the expected/typical time and space costs of the top few hundred or so most used .NET BCL methods, and to showcase as cautionary tales a few of the horror stories we found working on the .NET performance. That led to some very interesting thinking about how to characterize the empirical performance of a class library / framework as actually used by real practitioners in the wild...</p> <p>Thanks for reading it back then, and thank you for your ongoing interest.</p> <p>p.s. I see Vance Morrison subsequently wrote a great two part MSDN series on this subject -- if you enjoyed my article you'll love these:</p> <p><a href="http://msdn.microsoft.com/en-us/magazine/cc500596.aspx">http://msdn.microsoft.com/en-us/magazine/cc500596.aspx</a></p> <p><a href="http://msdn.microsoft.com/en-us/magazine/cc507639.aspx">http://msdn.microsoft.com/en-us/magazine/cc507639.aspx</a></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload