我有一个.NET远程处理应用程序。目前,该应用程序具有这样的功能:远程处理服务器需要获取文件并将其作为字节数组发送到客户端。由于整个字节数组一次发送到客户端,如果文件大小很大,那么就会出现问题。
所以我正在考虑实现文件的部分读取,
喜欢
public byte[] ReadPartialFile(string fileName, int offset, int bufferSize)
{
//use FileStream and BinaryReader to read the required (depends of offset and buffer) bytes and send them back...
}但我担心如果文件很大而缓冲区很小,FileStream和相关对象将被创建和释放N次,这可能会对应用程序产生不利影响...
我也不想影响应用程序(客户端和服务器)的内存消耗……
谁有更好的主意..。
发布于 2012-07-27 21:33:45
由于流是MarshalBy引用,因此可以将流从客户端传递到服务器
public unsafe void ReadFileFromSensor(Stream destination)
{
//server writes to stream
destination.Write(buffer, 0, buffer.Length);
}相反的方式是行不通的。如果通过远程处理从流中读取,则传递的数组将被序列化,因此不会被填充。
在本例中,我们为流定义了一个扩展方法,而不需要传递数组
public static byte[] Read(this Stream stream, int nBytesToRead, out int nBytesRead)
{
byte[] buffer = new byte[nBytesToRead];
nBytesRead = stream.Read(buffer,0,nBytesToRead);
return buffer;
}我们使用这种方法在本地以太网上进行通信。在这里,服务器访问客户端上的流是没有问题的。但在其他情况下,如果服务器必须连接回客户端,这可能是一个问题。
https://stackoverflow.com/questions/11688554
复制相似问题