C#:FTP上传缓冲区大小

我已经去了FTP上传function,但有一些我想问的问题是缓冲区大小,我把它设置为20KB是什么意思,如果我增加/减少它会有什么不同吗?

private void Upload(string filename) { FileInfo fi = new FileInfo(filename); FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create("ftp://" + textBox1.Text + "/" + Path.GetFileName(filename)); ftp.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text); ftp.Method = WebRequestMethods.Ftp.UploadFile; ftp.UseBinary = true; ftp.KeepAlive = false; ftp.ContentLength = fi.Length; // The buffer size is set to 20kb int buffLength = 20480; byte[] buff = new byte[buffLength]; int contentLen; //int totalReadBytesCount = 0; FileStream fs = fi.OpenRead(); try { // Stream to which the file to be upload is written Stream strm = ftp.GetRequestStream(); // Read from the file stream 2kb at a time contentLen = fs.Read(buff, 0, buffLength); // Till Stream content ends while (contentLen != 0) { // Write Content from the file stream to the // FTP Upload Stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // Close the file stream and the Request Stream strm.Close(); fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Upload Error"); } } 

对于桌面系统上的FTP,块大小约为256Kb,在我们的测试中产生了最佳性能。 小缓冲区大小会显着降低传输速度。 我建议你自己做一些测量,但20Kb对于缓冲区来说肯定是太少了。

文件已由文件系统缓存缓冲。 你应该使用低于20KB的东西。 4 KB是一个传统的选择,我真的不会低于4 KB。 不要超过一千字节,超过16 KB是浪费内存并且对CPU的L1缓存(通常是16或32 KB的数据)不友好。

汉斯( https://stackoverflow.com/a/3034155

Use 4 KB (AKA 4096 b)

在.Net 4.5中,他们将默认值增加到81920字节,使用.Net Reflector显示_DefaultCopyBufferSize的值为0x14000(81920b,或80K)。 但是,这适用于从流到流的复制,而不是缓冲数据。 BufferedStream类的_DefaultBufferSize为0x1000(4096b或4k)。