Утечка памяти: 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:
Отсюда вопрос - где я ошибся, что каждое нажатие добавляет потребляемую память?


