0

我有一个 .NET Remoting 应用程序。目前,该应用程序具有远程服务器需要获取文件并将其作为字节数组发送到客户端的功能。由于整个字节数组会立即发送到客户端,如果文件大小很大,那么就会出现问题。

所以我正在考虑实现文件的部分读取,

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...
}

但是我担心如果文件很大,缓冲区很小,文件流和相关对象会被创建和处理 N 次,这会对应用程序产生不利影响....

我也不想增加应用程序(客户端和服务器)的内存消耗......

谁有更好的主意...

4

1 回答 1

2

由于 Stream 是 MarshalBy Ref 您可以将流从客户端传递到服务器

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;
}

我们使用这种方法通过本地以太网进行通信。服务器访问客户端上的流没有问题。但如果服务器必须连接回客户端,则在其他情况下可能会出现问题。

于 2012-07-27T13:33:44.583 回答