以下函数就是获取文件夹下的文件夹和文件列表。速度很慢
假如我的FTP上有1万个文件夹,那么就要调用这个函数1万次。每次都要传入用户密码连接,速度很低,很慢怎样能一次连接,N次获取文件列表???不用每次都连接或者谁能把这个函数优化到最快。private List<string>  GetFileList(string ftpServerIP, string ftpUserID, string ftpPassword, string ftppath, int type)
        {
            
            FtpWebRequest reqFTP;
            List<string> list1 = new List<string>();
            try
            { 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP.Trim() + "/"));
                if (type==1)
                {
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP.Trim() + "/" + ftppath + "/"));
                }
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {
                    list1.Add(line);
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();
               
                return list1;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                list1 = null;
                return list1;
            }
        }

解决方案 »

  1.   

    “函数优化到最快”?如果你就是一个函数设计思维,没有出路。一个稍微复杂一点的行为,至少是围绕一个对象的。例如:interface YourCase
    {
        Uri Server{get;set;}
        string UserName{get;set;}
        string Password{get;set;}    void Open();
        void Close();
        string[] 获取文件列表(string path);
    }
      

  2.   

    sp1234能不能再详细点啊?不懂oop
      

  3.   

    “一次连接、N次获取文件列表”这是你的原话。分离操作行为,复杂一点的操作行为,就需要将操作所针对的对象作为一个编程对象来设计,然后你才能考虑N次读取行为之间如何共享(甚至在一个控制程序操纵下)这个对象。打个比方,假设你有个行为“要苹果一口”,学究会纠缠于这个动作,而普通人会首先意识到不论咬不咬它这个苹果都是一个独立存在的对象,因此优先对对象建模,而是优先写函数。更多我不多说了,这是一个软件设计基础知识,你可以找OO设计(面向对象设计)方面的教科书看看。
      

  4.   

    你需要设计和实现一个YourCase接口的对象(类),不论你如何用代码调用它,它都可以知道如何Open一个远程Server,如何关闭,如何返回你要查询的路径下的列表,以及还可以扩展其它的属性和方法。它知道如何做这些事,你知道如何N次调用它,调用者和被调用的对象本身是可以分离开的、互相修改实现方式也不会影响协作的。基本上,复杂的编程就是基于对象的,而不是基于函数的。