我有一个Canvas
,我添加了20000 Line
对象如下。清除画布和内存wpf
for (var i = 0; i < 20000; i++)
{
var l = new Line
{
X1 = 10,
Y1 = 10,
X2 = 10,
Y2 = 100,
Stroke = Brushes.White
};
canvas.Children.Add(l);
}
现在让我们假设我想删除从Canvas
这些行。我这样做如下:
canvas.Children.Clear();
但这并不清除内存,它就像数据卡在那里。因此,当我添加另一个20000 Line
对象时,内存会在一段时间后爆炸。
我知道Line
有开销,我不应该在第一时间使用它,但我的问题现在在另一个区域。如何在不增加内存的情况下清除20000行的画布并绘制新的画布。
内存是否下降或从不?你确定你没有在任何地方参考这些线? –
不,它只有在我手动使用GC.Collect()时才会出现。 – Vahid
当你说GC.collect()后内存使用量下降时,它也会自动下降。这种情况发生在垃圾回收决定是时候清理了。你只是没有等待足够长的时间,或者没有使用足够的其他记忆。 – Clemens