我有一個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