title: Performance of DrawingVisual vs Canvas.OnRender for lots of constantly changing shapes
body: <p>I'm working on a game-like app which has up to a thousand shapes (ellipses and lines) that constantly change at 60fps. Having read an <a href="http://msdn.microsoft.com/en-us/magazine/dd483292.aspx" rel="noreferrer">excellent article on rendering many moving shapes</a>, I implemented this using a custom Canvas descendant that overrides <code>OnRender</code> to do the drawing via a <code>DrawingContext</code>. The performance is quite reasonable, although the CPU usage stays high.</p>
  
  <p>However, the article suggests that the most efficient approach for <em>constantly moving</em> shapes is to use lots of <code>DrawingVisual</code> instances instead of <code>OnRender</code>. Unfortunately though it doesn't explain <em>why</em> that should be faster for this scenario.</p>
  
  <p>Changing the implementation in this way is not a small effort, so I'd like to understand the reasons and whether they are applicable to me before deciding to make the switch. Why could the <code>DrawingVisual</code> approach result in lower CPU usage than the <code>OnRender</code> approach in this scenario?</p>