首页 新闻 会员 周边 捐助

关于多线程技术,麻烦高手指教!

0
悬赏园豆:10 [已关闭问题] 浏览: 399次

我写的程序主要是以下功能:

     获取某FTP服务器下某一目录的规定条件的文件,假设有10个符合要求,需要下载,那么我下载数据的过程在一个单独的类中完成,这个类叫做downone,它包含了一些下载文件所需的文件地址、用户名、密码等信息,还包含一个方法叫makeDown(),它实现具体的下载功能;

    在主程序中我使用以下方法进行线程启动:

      Thread[] myth = new Thread[downFiles.Count];  \\设置线程变量数组用于后期监视,downFiles.Count为需要下载的文件数量;
                List<downone> downOneList = new List<downone>();
                for (int i = 0; i < myth.Length;i++ )    //对每个筛选完成后的文件进行下载
                {
                    Uri downUri = new Uri(serveUri, downFiles[i]);
                    downone mydown = new downone(downUri,downFiles[i],singleSite[2],singleSite[3],singleSite[9]);   \\构造函数,为downone类赋初值
                    downOneList.Add(mydown);
                    myth[i] = new Thread(new ThreadStart(mydown.makeDown)); \\启动线程
                    myth[i].Start();
                }

以上代码启动了10个线程(如果有10个文件),同时到该FTP站点下载不同的文件,但问题是我发现基本上只有两个文件同时下载,也就是说同一时间只有两个线程在工作,其他线程好像在队列中,为什么不是10个文件一起下载呢,麻烦指教!

hmqr的主页 hmqr | 初学一级 | 园豆:147
提问于:2010-07-21 10:44
< > 人人可用的开源BI工具
分享
其他回答(1)
0

可能是FTP 服务器测限制了同时连接个数

eaglet | 园豆:17139 (专家六级) | 2010-07-21 12:52
不知道C#这种频繁的用同一用户名和密码登陆服务器会不会给服务器带来负担。觉得普通商业的FTP软件工作方式好像不是这样的啊,一次登陆就取回需要的所有文件,而C#却要一个文件登陆一次,不知有没有什么好的办法,谢谢!
支持(0) 反对(0) hmqr | 园豆:147 (初学一级) | 2010-07-21 14:55
0

Ftp基于TCP协议,即面向连接,因此每次交互都需要确认连接。类似HTTP.因此,FTP应该也有保持会话,类似session的功能。没用过,我是猜的。可以试试这个思路。

大黄牛 | 园豆:205 (菜鸟二级) | 2010-07-21 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册
Top