写了个程序,由于动态New出来的对象比较多,被发现有少量的内存泄露问题。仔细找了好几圈,确认所有引用都被释放了,但问题依然存在。后来仔细观察发现,即使是一个简单的按钮事件:鼠标移进去变色,移出来恢复原来的颜色,这样的情况下内存也会持续增长,尽管增长幅度不尽相同。
于是写了个简单的测试程序,有两个按钮:点击Add按钮,动态new出8000个Ellipse,大小为10*10,半透明;点击Delete按钮,从界面上移除这8000个Ellipse,使用Children.Clear()方法。经测试发现,每次Add以后,再Delete,内存只有极少量的回收(估计是从界面渲染上回收的),而每次Add之后内存增长都在10兆到20兆。测试代码如下:
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
addNew.MouseLeftButtonUp += new MouseEventHandler(addNew_MouseLeftButtonUp);
delAll.MouseLeftButtonUp += new MouseEventHandler(delAll_MouseLeftButtonUp);
}
void delAll_MouseLeftButtonUp(object sender, MouseEventArgs e)
{
t.Children.Clear();
t.Children = new VisualCollection();
}
void addNew_MouseLeftButtonUp(object sender, MouseEventArgs e)
{
for (int i = 0; i < 8000; i++)
{
Ellipse elps = new Ellipse();
elps.Fill = new SolidColorBrush(Color.FromArgb((byte)99, (byte)00, (byte)00, (byte)00));
elps.Width = 10;
elps.Height = 10;
elps.SetValue(Canvas.LeftProperty, (i % 53) * 12);
elps.SetValue(Canvas.TopProperty, (i / 53) * 12);
t.Children.Add(elps);
}
}
您可能对这些文章也感兴趣:- Silverlight读XML是件痛苦的事情
- 虚惊一场后,Silverlight 2 RC0这次是真的发布了
- 用XamlReader做一个简单的XAML预览工具
- Silerlight也可以不放在页面的顶层
- 返回指定Canvas中的所有TextBlock
- Silverlight 3 Beta出来了
- HttpWebRequest头部可用设置以及可读设置
- Path的Stroke和Fill属性不能指向同一个SolidColorBrush对象?
- Silverlight 1.0 Released
- 在Silverlight 2中使用嵌入字体
与该文相关的评论:(我也想说几句)Processed in 0.078126 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号
2007-12
我来说两句:
用户中心
日志分类

最新日志
统计信息





