首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于多线程下载的优化解决方案

2012-02-14 
关于多线程下载的优化我用indy组件做了个支持http和ftp的多线程断点下载的破东西,下大文件比不用线程直接

关于多线程下载的优化
我用indy组件做了个支持http和ftp的多线程断点下载的破东西,下大文件比不用线程直接用indy快,但是在下很多小文件的时候(300K以内)花的时间比直接用indy还慢,慢的原因主要是每次下一个文件都要重新链接一次服务器,而直接用indy的话,connected之后就是循环get的,中间不用断开链接,所以在下大量小文件时响应时间比较快,省去了频繁链接占用的时间;这是第一个破地方,
第二个破地方是,因为是对一个文件分块,如在FTP时当下载完分块要在idftp的onwork事件里抽身出来,跳到Execute的大循环继续下载另外一个分块,这时抽身我又要断开一次(这里是否可以不断开?希望能提供个方法,我没找到); 因为这样的频繁断开,所以使多线程下载时的响应时间慢了下来。 希望大家踊跃发言提个比较好的方案
总结下主要问题就是 有什么方法可以使多线程在下载小文件时比单线程快或者相等,暂时只谈论用indy组件的方式吧,谢谢各位。(不能用同时下载多文件的方法)

[解决办法]
校验包的过程也是耗时的
[解决办法]
不知道你的网速多快,快的话一个小文件基本一下就过去了,你用多线程去下载,那么还要花时间去计算每个分块大小等信息,做多了不少处理了吧,慢点是正常的。你可以考虑分块的大小,如果块太小了不分。
[解决办法]
这个我觉得还是设计有问题,如果你只是使用一个主控线程去分派任务,由分支线程操作的话,肯定要慢,但是如果你的主控线程本身做第一份工作,这样的话,你在判断到内容比较少的时候就不需要进行二次分派。

热点排行