Nach der Verwendung von RemoveRange bleiben die Elemente im Speicher. Es gibt keinen anderen Hinweis, den ich auf diese Gegenstände weiß. Sollte ich nur einen Workaround verwenden, wo ich die gewünschten Artikel kopiere und die alte Liste komplett abbringe?C# Liste <T> RemoveRange Was passiert mit entfernten Objekten?
ein Beispiel zur Veranschaulichung gemacht:
private void Form1_Load(object sender, EventArgs e)
{
bmp = new Bitmap(5000, 5000, PixelFormat.Format32bppPArgb);
pictureBox1.Image = bmp;
pictureBox1.Width = bmp.Width;pictureBox1.Height = bmp.Height;
bmp2 = new Bitmap(some_image_file);//500x500 bitmap
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
bitmap_list.Add(new Bitmap(bmp));
Graphics.FromImage(bmp).DrawImage(bmp2, e.X - bmp2.Width/2, e.Y - bmp2.Height/2);
pictureBox1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{// where do the items go? memory is not freed until running a manual GC
bitmap_list.RemoveRange(1, bitmap_list.Count - 1);
}
private void button2_Click(object sender, EventArgs e)
{// if this is not clicked, memory will run out even after clearing the list
// down to one item
GC.Collect();
}
Dank!
Danke, das war's. Ich benutze normalerweise viel, habe aber aus irgendeinem Grund nicht daran gedacht. – george