【发布时间】:2014-03-19 14:10:35
【问题描述】:
我正在加载和卸载Canvas 中的图像。我使用下面的代码来加载Image。
在加载我的Image 之前,内存消耗为 14.8MB。
Canvas c = new Canvas();
Image im = new Image();
ImageSource src = new BitmapImage(new Uri(@"E:Capture.png"));
im.Source = src;
im.Height = 800;
im.Width = 800;
c.Children.Add(im);
homegrid.Children.Add(c); //homegrid is my grid's name
Image 显示正确,现在内存消耗为 20.8MB。然后我通过以下代码卸载了Image:
foreach (UIElement element in homegrid.Children)
{
if (element is Canvas)
{
Canvas page = element as Canvas;
if (page.Children.Count > 0)
{
for (int i = page.Children.Count - 1; i >= 0; i--)
{
if (page.Children[i] is Image)
(page.Children[i] as Image).Source = null;
page.Children.RemoveAt(i);
}
}
page.Children.Clear();
page = null;
}
}
homegrid.Children.RemoveAt(2);
InvalidateVisual();
Image 此后被删除,但内存仍为 20.8 MB。
谁能帮我解决这个问题?
【问题讨论】:
-
如何收集垃圾?
-
这不是内存泄漏。 GC 最终会处理那些不再被引用的实例。
-
@ken2k :我没明白你的意思。可以请教一下
标签: c# wpf image canvas memory-leaks