首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET Remoting :读取大文件

.NET Remoting :读取大文件
EN

Stack Overflow用户
提问于 2012-07-27 21:19:01
回答 1查看 1.4K关注 0票数 0

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

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

喜欢

代码语言:javascript
复制
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次,这可能会对应用程序产生不利影响...

我也不想影响应用程序(客户端和服务器)的内存消耗……

谁有更好的主意..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-27 21:33:45

由于流是MarshalBy引用,因此可以将流从客户端传递到服务器

代码语言:javascript
复制
public unsafe void ReadFileFromSensor(Stream destination)
{
     //server writes to stream
     destination.Write(buffer, 0, buffer.Length);
}

相反的方式是行不通的。如果通过远程处理从流中读取,则传递的数组将被序列化,因此不会被填充。

在本例中,我们为流定义了一个扩展方法,而不需要传递数组

代码语言:javascript
复制
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;
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11688554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档