2012-07-27 81 views
0

我有一個.NET Remoting應用程序。 目前該應用程序具有Remoting Server需要獲取文件並將其作爲字節數組發送給客戶端的功能。由於整個字節數組將立即進入客戶端,如果文件大小很大,則會出現問題。.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... 
} 

但我擔心,如果文件較大和緩衝區大小小,因此FileStream和相關對象將被創建和配置的N次,可在應用程序產生不利影響....

我也不想秒殺應用程序(客戶端&服務器)的內存消耗...

任何人有更好的想法...

回答

2

由於流是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; 
} 

我們用這種方法在本地以太網通信。在那裏,服務器訪問客戶端上的流不是問題。但是,如果服務器必須連接回客戶端,則在其他情況下可能會出現問題。

+0

我創建了一個從MarshalByRef派生它的類,並在內部使用Stream類。謝謝。 – Brij 2012-08-27 12:17:43