title: Is copying from an array of value-types faster than from an array of reference-types ? Why?
body: <p>I made <strong>some tests that used Array.Copy</strong> to copy parts of an array to another.</p>
  
  <p>The first test used Array.Copy on an array of value-types</p>
  
  <pre><code>struct ValueApple {
      public int Redness;
  }
  
  ValueApple[] a1 = ...
  ValueApple[] a2 = ...
  
  Array.Copy(a1, a2, a1.Length);
  </code></pre>
  
  <p>Then the second test used Array.Copy on an array of reference-types</p>
  
  <pre><code>class ReferenceApple {
      public int Redness;
  }
  
  ReferenceApple[] a1 = ...
  ReferenceApple[] a2 = ...
  
  Array.Copy(a1, a2, a1.Length);
  </code></pre>
  
  <p>I came <strong>with results that showed that copying between arrays of value-types is faster than copying between arrays of reference types.</strong></p>
  
  <p>So my question is:</p>
  
  <p><strong>Is that true ? Is copying from an array of value-types faster than from an array of reference-types and why ?</strong></p>
  
  <hr>
  
  <p>Then my second question would be:</p>
  
  <p><strong>If copying from an array of value-types is faster. If I create a value-type wrapper for a reference-type, won't that help me boost performace ?</strong></p>
  
  <p>For example</p>
  
  <pre><code>struct ValueWrapper&lt;T&gt; {
      public T Value;
  }
  
  class ReferenceApple { }
  
  ValueWrapper&lt;ReferenceApple&gt;[] a1 = new ValueWrapper&lt;ReferenceApple&gt;[20];
  ValueWrapper&lt;ReferenceApple&gt;[] a2 = new ValueWrapper&lt;ReferenceApple&gt;[40];
  
  Array.Copy(a1, a2, 20);
  </code></pre>
  
  <p>Should this also be faster than using a plain <strong>ReferenceApple[]</strong> array ?</p>