C#:FTP 上传缓冲区大小
Posted
技术标签:
【中文标题】C#:FTP 上传缓冲区大小【英文标题】:C# : FTP upload buffer size 【发布时间】:2012-06-07 23:21:57 【问题描述】:我已经使用了 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");
【问题讨论】:
【参考方案1】:对于桌面系统上的 FTP,大约 256Kb 的块大小在我们的测试中产生了最佳性能。较小的缓冲区大小会显着降低传输速度。我建议您自己进行一些测量,但是 20Kb 对于缓冲区来说绝对太少了。
【讨论】:
我无法相信这对我的 SFTP 应用程序有多大影响。非常感谢!【参考方案2】:文件已被文件系统缓存缓冲。你应该使用 小于 20KB 的东西。 4 KB 是一个传统的选择,我真的 不会低于 4 KB。不要低于一千字节,超过 16 KB浪费内存,对CPU的L1缓存不友好 (通常为 16 或 32 KB 的数据)。
汉斯 (https://***.com/a/3034155)
Use 4 KB (AKA 4096 b)
在 .Net 4.5 中,他们将默认值增加到 81920 字节,并且使用 .Net Reflector 显示 _DefaultCopyBufferSize 的值为 0x14000(81920b 或 80K)。但是,这是用于从流复制到流,而不是缓冲数据。 BufferedStream 类的 _DefaultBufferSize 为 0x1000(4096b 或 4k)。
【讨论】:
您能解释一下为什么要选择20KB以下的缓冲区吗?它使传输非常缓慢! 微软也默认为 4KB。 msdn.microsoft.com/en-us/library/… - 如果使用包装好的 MSFtpPutFile()
实际上你会使用 4KB 的缓冲区大小。如果它是框架中内置的东西,不知道为什么我的回答会是错误的(你会放弃投票的需要)......
还添加了我的答案的来源。在这个答案上,很多其他人似乎都同意我的观点。 - 作为旁注,我也发送小文件(40KB 左右),这对我来说非常有用。如果你有更大的文件,你会想要使用更大的缓冲区以获得最佳性能。
没问题@Toshi。 ;)以上是关于C#:FTP 上传缓冲区大小的主要内容,如果未能解决你的问题,请参考以下文章