Одной из причин этого может быть то, что ваш код переводится примерно так:
int totalMemory = GC.GetTotalMemory(true);
string s = "Total bytes : " + totalMemory;
Console.WriteLine(s);
Во второй строке приведенного выше кода класс String
инициализируется, если это еще не было. Это означает, что его статические поля инициализируются, и вызывается его статический конструктор (если он есть). Затем вызывается метод Concat()
, и все классы, необходимые для его выполнения, также инициализируются.
И в третьей строке класс Console
инициализируется, если это еще не было. Затем, конечно, все классы, используемые во время выполнения WriteLine()
тоже.
Все статические поля требуют некоторой памяти, поэтому они чувствуют, что когда вы звоните GC.GetTotalMemory()
во второй раз, вы получаете несколько большее число.