1.我使用idhttp多线程下载,在下载线程里只负责get,但是get完毕我没有断开连接(disconnect),直接继续get。这样做会有什么安全隐患吗?
2.我下载3万个文件,一开始下载速度还是可以的,但是时间越久速度越慢,这个是服务器上的问题吗还是客户端idhttp的问题呢?如果并发数变多,下载到1万多个文件以后,速度真的太慢太慢了。我现在不知道是服务器引起速度变慢还是客户端代码问题(idhttp)导致速度变慢的?

解决方案 »

  1.   

    可能要注意几点吧:
    注意IDHTTP释放。
    文件大的话,适当设置内存的大小
    文件并发量的话,服务器肯定受不了
      

  2.   

    我测试的时候并发才4个,我想用一个idhttp下载3万个文件,但是idhttp在下载的过程中没用用过disconnect,这样会影响服务器的性能吗
      

  3.   

    idhttp 写在多线程里  动态创建  
    这样每个线程结束 就自动释放了 建议你disconnect   我也经常写 Idhttp 多线程下载的东东  线程数一般不要超过10  否则服务器不堪重压很多线程会timeout
      

  4.   

    在多线程里每个线程动态创建自己所用的IDHTTP,用完就释放;
    不要用多个线程操作一个IDHTTP;
      

  5.   

    楼上说的多
    线程操作idhttp类似这样访问端口的东西 都要独立处理
    不要混在一起 想过去好像是不会有问题
    但是程序在运行的时候 就是会报错
    最好是要严格封开
    还有 最好在线程中加入 initco初始化端口的代码,不然有时候会出错 注意得引用activex单元
      

  6.   

    1.我的确是在线程里动态创建idhttp的,每个线程的idhttp都是私有的。每个线程是个死循环,每下完一个文件我就让线程挂起,等待下一个文件下载。idhttp在线程里只创建一次,和线程一起销毁。idhttp工作模式是(create->get->disconnect->get->disconnect....->freeandnil)(这样做有什么不好的地方吗?求意见)?
    2.我下载的模式是提供一个管理线程对下载线程进行线程数量的控制和分配url给线程下载,管理线程里也有个idhttp(只创建一次,同管理线程一起销毁),用于提取url的文件名。idhttp工作模式是(create->head->disconnect->head->disconnect....->freeandnil)你们觉得我这样做会有什么毛病吗?我觉得下载速度挺慢的。
      

  7.   

    get完毕会自动disconnect吧,这个方法应该差不多,下载速度很慢很正常。
      

  8.   

    1,这要看下 服务端,是并发,还是阻塞的,按照道理来说是很快。2.看看你本地的 socket 是否处于 time_wait 状态。
       需要把这个 keeplive 设置成 1,这样 time_wait 可能会少,防止 socket 用完。