C# :FTP 上传缓冲区大小
本文关键字:缓冲区 FTP | 更新日期: 2023-09-27 18:36:13
我有FTP上传功能,但有件事我想问它是缓冲区大小,我将其设置为 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。 不要低于 1 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)。