title: Quickest Array Initialization?
body: <p>In an application of mine, I need a large constant (actually <code>static readonly</code>) array of objects. The array is initialized in the type's static constructor.</p>
  
  <p>The array contains more than a thousand items, and when the type is first used, my program experiences a serious slowdown. I would like to know if there is a way to initialise a large array quickly in C#. </p>
  
  <pre><code>public static class XSampa {
      public class XSampaPair : IComparable&lt;XSampaPair&gt; {
          public XSampaPair GetReverse() {
              return new XSampaPair(Key, Target);
          }
          public string Key { get; private set; }
          public string Target { get; private set; }
          internal XSampaPair(string key, string target) {
              Key = key;
              Target = target;
          }
          public int CompareTo(XSampaPair other) {
              if (other == null)
                  throw new ArgumentNullException("other", 
                          "Cannot compare with Null.");
              if (Key == null)
                  throw new NullReferenceException("Key is null!");
              if (other.Key == null)
                  throw new NullReferenceException("Key is null!");
              if (Key.Length == other.Key.Length)
                  return string.Compare(Key, other.Key, 
                          StringComparison.InvariantCulture);
              return other.Key.Length - other.Key;
          }
      }    
      private static readonly XSampaPair[] pairs, reversedPairs;
      public static string ParseXSampaToIpa(this string xsampa) {
          // Parsing code here...
      }
      public static string ParseIpaToXSampa(this string ipa) {
          // reverse code here...
      }
      static XSampa() {
          pairs = new [] {
              new XSampaPair("a", "\u0061"), 
              new XSampaPair("b", "\u0062"),
              new XSampaPair("b_&lt;", "\u0253"), 
              new XSampaPair("c", "\u0063"),
              // And many more pairs initialized here...
          };
          var temp = pairs.Select(x =&gt; x.GetReversed());
          reversedPairs = temp.ToArray();
          Array.Sort(pairs);
          Array.Sort(reversedPairs);
      }
  }
  </code></pre>
  
  <p>PS: I use to array to convert X-SAMPA phonetic transcription to a Unicode string with the corresponding IPA characters.  </p>