Вот небольшая консольная программа, с которой я играю, чтобы узнать, почему мое производственное приложение потребляет слишком много памяти:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Console.WriteLine("Press key - 1"); Console.ReadLine();
var q = new Queue<string>();
for (int i = 0; i < 1000000; i++)
q.Enqueue("test string" + i);
Console.WriteLine("Press key - 2"); Console.ReadLine();
q = null;
Console.WriteLine("Press key - 3"); Console.ReadLine();
GC.Collect();
Console.WriteLine("Press key - 4"); Console.ReadLine();
GC.Collect(2);
Console.WriteLine("Press key - 5"); Console.ReadLine();
}}}
Я запускаю его и отслеживаю диспетчер задач Windows, нажимая клавишу. Вот что я вижу в столбце Память на каждом шаге:
- 4 700K
- 61 616K
- 61 596K
- 10 588K
- 8 588K
Результаты немного различаются (всего несколько Ks) от пробега к бегу, но вы получите картину. Может кто-нибудь объяснить, что здесь происходит?
Моя среда: .NET4 (профиль клиента), Windows 7 x64.