即时编写文件传输应用程序来发送和接收大数据,如1 GB ..但我想当我从文件中读取数据并将其填充到一个字节数组中时,它存储在RAM中,这会对计算机产生影响速度......我应该这样做:
(loop till end of the file)
{
read 128 MB from the file into byte array
(loop till end of 128)
{
send 1 kb to server
}
byte array = null
}
如果那是对的.. 哪个更好!! beginSend和beginReceive发送大文件或只是循环发送文件
如果你用一些代码教我,我会很高兴的 提前谢谢:)答案 0 :(得分:0)
如果你[开始]发送超过大约的数据,Windows将开始表现得很奇怪。一次性1MB。这在Windows版本,网络驱动程序,用户的鞋号和月相之间有所不同。低于1 MB你应该没问题。
所以,
(loop till end of the file)
{
read 128 MB from the file into byte array
(loop till end of 128)
{
send 1 MB to server
}
byte array = null
}
或者,如果它确实是一个文件
SendFile(filename[,...])
答案 1 :(得分:0)
甚至128mb都不是一个好方法..它更好地读取一个小缓冲区..然后直接发送到另一边
检查出来。
将fileName和fileSize发送到另一侧
之后这应该在(服务器/客户端)
中很常见FileStream fs;
NetworkStream network;
int packetSize = 1024*8;
发送方法
public void Send(string srcPath, string destPath)
{
byte data;
string dest = Path.Combine(destPath, Path.GetFileName(srcPath));
using (fs = new FileStream(srcPath, FileMode.Open, FileAccess.Read))
{
try
{
long fileSize = fs.Length;
long sum = 0;
int count = 0;
data = new byte[packetSize];
while (sum < fileSize)
{
count = fs.Read(data, 0, packetSize);
network.Write(data, 0, count);
sum += count;
}
network.Flush();
}
finally
{
fs.Dispose();
data = null;
}
}
}
接收方式:
public void Receive(string destPath, long fileSize)
{
byte data;
using (fs = new FileStream(destPath, FileMode.Create, FileAccess.Write))
{
try
{
int count = 0;
long sum = 0;
data = new byte[packetSize];
while (sum < fileSize)
{
count = network.Read(data, 0, packetSize);
fs.Write(data, 0, count);
sum += count;
}
}
finally
{
fs.Dispose();
data = null;
}
}
}