現在よりも高速に多数の小さなファイルを処理できるように、WCF クライアント/サーバーを改善したいと考えています。
ネットワーク経由でファイルを移動するための WCF クライアントとサーバーを作成しました。
クライアントからサーバーに呼び出しを行い(ダウンロードするファイルの名前をパラメーターとして送信)、サーバーにストリームを返させることで機能させます
簡単な例:
//CLIENT CODE>>
Stream stream = syncService.GetStream(fileName);
//<<CLIENT CODE
//SERVER CODE>>
public Stream GetStream(string fileName)
{
string filePathOnServer = ServerService.Service1.SERVER_FILES_PATH + fileName;
return File.OpenRead(filePathOnServer);
}
//<<SERVER CODE
複数のファイルを取得する必要がある場合は、GetStream を再帰的に呼び出し、クライアント マシンのファイルにストリームを保存します。少数の大きなファイルを移動する場合は問題なく動作します。私が抱えている問題は、サイズに関係なく、1 つのファイルをダウンロードするオーバーヘッドが約 1/10 秒であることです。したがって、膨大な数の 1Kb ファイルをダウンロードしたい場合、基本的に最大 10Kb に制限されます。
誰かが別の実装について提案してくれることを願っています。サーバーからストリームのリストを返そうとしましたが、WCF ではこれが許可されないことがわかりました。
ファイルを圧縮せずにこれを実行できる必要があります。
連結された複数のストリームで構成された 1 つのストリームを返すことを検討していましたが、より良いアプローチがあるかどうかはわかりません。