2009-12-29 56 views
2

只是看着ftp'ing在c#中的文件的各種方式。 我注意到一些例子做:爲什麼流文件與立即發送文件?

streamReader.ReadToEnd() 

然後轉換爲字節,然後發送文件一氣呵成。

,而其他做:

while (contentLength != 0) 
    stream.write(buff, 0, contentLength); 
    contentLength = fileStream.Read(buff, 0, buffLength); 

是一次較大的文件發送文件2048,而另一種方法是罰款在10-50K範圍內的文件?

+0

爲此使用一個庫。 – 2009-12-29 18:34:34

回答

1

如果您只能一次讀取或寫入文件,則必須爲整個文件分配足夠的空間。這可能很麻煩,特別是當你不知道文件有多大的時候。對於較慢的連接也是不好的,因爲在完成整個任務之前,您將無法使用該文件的任何,這對於流式傳輸電影或音頻等應用程序來說顯然非常糟糕。緩衝是處理這種情況的一個很好的總體策略。

1

這實際上取決於您正在設計的系統所處理的文件大小。如果您的文件非常大,則整個文件必須保存在緩衝區中,並且如果在流式傳輸過程中沒有將文件「分塊」到各個部分,則服務器內存將快速用完。

0

如果你有很大的文件,最好不要用大的文件來壓縮內存,而應該把它分解成幾部分。

0

使用一個較小的2K緩衝幾乎總是會在內存方面更好的第二個代碼,並在時間上可能會是一個很微不足道的差別:

http://en.wikipedia.org/wiki/Space-time_tradeoff

另外,您代碼使用兩行縮進的while循環,但第二行實際上並不是循環的一部分,因爲它沒有用大括號括起來。

相關問題