Утечка памяти: WeakReference[] [Статическая переменная SystemColorTracker.list]

Имеется код кнопки (берется 2 дополнительных изображения и наносятся на pictureBox картинку):

private void testButton_Click(object sender, EventArgs e)
        {
            waterMarkImg = Image.FromFile(mark);

            rotStamp = rnd.Next(-15, 15);
            waterMarkImg = RotateImage(waterMarkImg, rotStamp);

            waterMarkKVImg = Image.FromFile(markKV);

            Image bgImage = Image.FromFile(pictureBox.ImageLocation);

            int h = bgImage.Height;
            int w = bgImage.Width;

            dateX = rnd.Next(w / 2, w - 200);
            dateY = rnd.Next(h / 2, h - 300);

            stampX = dateX + rnd.Next(0, 200) - 100;
            while (stampX + w / 5 > w) stampX = dateX + rnd.Next(0, 200) - 100;
            stampY = dateY + rnd.Next(0, 300) - 150;
            while (stampY + w / 5 > h) stampY = dateY + rnd.Next(0, 300) - 150;

            kvX = stampX + rnd.Next(0, 200) - 100;
            kvY = stampY + rnd.Next(0, 150) - 75;

            Font bigFont = new Font("CrashNumbering Serif", (int)(w / 60), FontStyle.Regular);
            Color st = Color.FromArgb(180, 056, 056, 140);
            bmp = new Bitmap(w, h);

            pictureBox.Image.Dispose();

            rotText = rnd.Next(-6, 6);
            rotFax = rnd.Next(-5, 3);

            var brush = new SolidBrush(st);

            using (Graphics g = Graphics.FromImage(bmp))
                {
                    g.DrawImage(bgImage, 0, 0, w, h);
                    g.RotateTransform(rotText);
                    g.DrawString(DateTime.Today.ToString("d"), bigFont, brush, dateX, dateY);
                    g.RotateTransform(-1 * rotText);
                    g.DrawImage(waterMarkImg, stampX, stampY, w / 5, w / 5);
                    g.RotateTransform(rotFax);
                    g.DrawImage(waterMarkKVImg, kvX, kvY, (int)(w / 5), (int)(waterMarkKVImg.Height * (int)(w / 5) / waterMarkKVImg.Width));
                    g.RotateTransform(-1 * rotFax);
                    pictureBox.Image = bmp;
                }                           
            waterMarkImg.Dispose();
            waterMarkKVImg.Dispose();
            bgImage.Dispose();
            bigFont.Dispose();
            brush.Dispose();
        }

Но с каждым нажатием кнопки растет потребление оперативки.

Решил посмотреть монитором, что происходит с памятью, получаю такой результат:

введите сюда описание изображения

При просмотре отличий снимков:

введите сюда описание изображения

Детали по WeakReference:

введите сюда описание изображения

Отсюда вопрос - где я ошибся, что каждое нажатие добавляет потребляемую память?


Ответы (0 шт):