在异步加载图片的时候发现的问题,因为要加载很多不同的图片,每次加载一个都要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);
}
}
}
您可能对这些文章也感兴趣:- 让Silverlight项目和Web项目完美融合
- Silverlight中C#获取与修改HTML DOM元素信息
- Silverlight User Control不支持接收键盘事件?
- Silverlight中XmlReader解析XML的流程
- Silverlight 3 Beta出来了
- Silverlight 1.0 Released
- Silverlight与Flash相比几大缺点
- 这就是PPStream的概念版网络电视?
- Silverlight 1.1 Tools for Visual Studio 2008
- Silverlight对视频流HTTP请求头的要求
与该文相关的评论:(我也想说几句)Processed in 0.1875444 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号
2008-1
我来说两句:
用户中心
日志分类

最新日志
统计信息





