我正在使用TCP
通過網絡發送/接收文件的程序中工作。 程序發送多個文件,因此在用戶退出程序之前,流不會關閉。發送文件時C#內存使用量巨大,System.OutOfMemoryException
我面對的問題是,當我發送一個700MB文件時,我的服務器程序私有內存增長到700,000 K,嚴重影響了我的計算機性能。當試圖發送另一個700MB文件時,服務器會拋出一個System.OutOfMemoryException
。
有人可以告訴我我做錯了什麼,或不做?
服務器端代碼:
using ( FileStream fs = new FileStream("dracula.avi", FileMode.Open, FileAccess.Read))
{
byte[] data = new byte[fs.Length];
int remaining = data.Length;
int offset = 0;
strWriter.WriteLine("Content-Length: " + data.Length);
strWriter.Flush();
Thread.Sleep(1000);
while (remaining > 0)
{
Thread.Sleep(10);
int read = fs.Read(data, offset, remaining);
remaining -= read;
offset += read;
}
fs.Flush();
fs.Close();
}
strm.Write(data, 0, data.Length);
strm.Flush();
GC.Collect();
不要聲明像byte [] data = new byte [fs.Length];'這樣的數組。在較小的卡盤中讀取數據並將其發送到循環中 –
謝謝,這就是我要做的。 – Spreadzz