Вызов Dispose()
в .Net не сразу собирает память - он оставляет ее, пока он не занят чем-то другим.
По сути, он не собрал эти 20 МБ, потому что потраченная впустую память еще не замедляет его. На вашей машине, вероятно, нет свободного места, зачем останавливаться и приводить в порядок, когда еще достаточно места?
Позвоните GC.Collect()
, чтобы заставить его, но учтите, что это обычно медленнее, чем оставлять .Net, чтобы делать свое дело. .Net неплохо собирает только тогда, когда это необходимо, если вы распорядитесь ресурсом. .