- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 
using System;
using System.Text;
public class Test
{
	public static void Main()
	{
		object obj = "Suck my balls";
		string str1 = "Suck my balls";
		string str2 = new StringBuilder().Append("Suck my ").Append("balls").ToString();
		Console.WriteLine(obj==str1);//True
		Console.WriteLine(str2==str1);//True
		Console.WriteLine(obj==str2);//False
	}
}
                                
 Follow us!
Т.е. получается что адрес obj и str1 указывает в ресурсы PE файла из #US "Suck my balls�", а str2 собирается из 2х указателей в #US:
1) Suck my �
2) balls�
И попадает в кучу.
Где-то ещё должен быть метод, который удаляет указатели вот на такие лишние строки в куче текущего процесса, но на память не могу вспомнить...
Или ты про gc.collect()?
https://ideone.com/oRK7jt
Есть еще string.IsInterned() - он просто извлекает ссылку если нет - возвращает null