Fdream's Blog
专注于WEB前端开发
Powered by Google

Silverlight中Downloader的缺陷?

14 未知 2008-1
Fdream 发表于 Silverlight, 已被阅读 9033 次, 评论 0 条
关键词:Silverlight
[ 阅读字体大小: ]

在异步加载图片的时候发现的问题,因为要加载很多不同的图片,每次加载一个都要new一个Downloader,结果发现句柄数一直不停地往上冒。后来写了个简单的测试程序,发现每次new一个Downloader,就会增加三个句柄左右,但并不回收。后来改变个方式,重复使用同一个Downloader,发现句柄数在增加一次后就一直不变了。看来和以前说的Silverlight内存回收属于一样的问题,现在就只能使用方法绕过去了,尽量重复使用Downloader,不要new新的Downloader。

比如使用一个Downloader池,一个简单的Downloader Pool应该有两个List和两个方法,两个List分别用来管理工作中的Downloader和空闲的Downloader,一个方法用来提供空闲的Downloader,另外一个方法用来回收已经用完的Downloader。注意,若使用下面的这种代码,需要在回收Downloader时同时去掉Downloader上所附加的托管事件(使用“-=”操作符),你也可以把Downloader的事件封装在这个Downloader Pool类里面~

引用内容:

public class DownloaderPool

{

……

……

private List<Downloader> IdleDownloader = new List<Downloader>();

private List<Downloader> BusyDownloader = new List<Downloader>();

……

……

private DownloaderPool()

{

}

public Downloader GetDownloader()

{

Downloader dler;

if (IdleDownloader.Count > 0)

{

dler = IdleDownloader[0];

IdleDownloader.Remove(dler);

BusyDownloader.Add(dler);

}

else

{

dler = new Downloader();

BusyDownloader.Add(dler);

}

return dler;

}

public void RestoreDownloader(Downloader dler)

{

BusyDownloader.Remove(dler);

if (IdleDownloader.Count < 100)

{

IdleDownloader.Add(dler);

}

}

}

Related articles 您可能对这些文章也感兴趣:
Related comments 与该文相关的评论:(我也想说几句)
Add a comment 我来说两句: 
禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情
arrow
用户名:   密码:  (匿名可不写) 同时注册?
验证码:   看不清?换个图片  看不清楚?换个图片

 
Copyright © 2005-2008,Fdream All Rights Reserved
Processed in 0.1875444 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号