title: Memory Efficiency and Performance of String.Replace .NET Framework
body: <pre><code> string str1 = "12345ABC...\\...ABC100000"; 
   // Hypothetically huge string of 100000 + Unicode Chars
   str1 = str1.Replace("1", string.Empty);
   str1 = str1.Replace("22", string.Empty);
   str1 = str1.Replace("656", string.Empty);
   str1 = str1.Replace("77ABC", string.Empty);
  
   // ...  this replace anti-pattern might happen with upto 50 consecutive lines of code.
  
   str1 = str1.Replace("ABCDEFGHIJD", string.Empty);
  </code></pre>
  
  <p>I have inherited some code that does the same as the snippet above. It takes a huge string and replaces (removes) constant smaller strings from the large string.</p>
  
  <p>I believe this is a very memory intensive process given that new large immutable strings are being allocated in memory for each replace, awaiting death via the GC.</p>
  
  <p><strong>1. What is the fastest way of replacing these values, ignoring memory concerns?</strong></p>
  
  <p><strong>2. What is the most memory efficient way of achieving the same result?</strong></p>
  
  <p>I am hoping that these are the same answer!</p>
  
  <p>Practical solutions that fit somewhere in between these goals are also appreciated.</p>
  
  <p>Assumptions: </p>
  
  <ul>
  <li>All replacements are constant and known in advance</li>
  <li>Underlying characters do contain some unicode [non-ascii] chars</li>
  </ul>