2016-04-22 6 views
0

私は、並列スレッドでリモートロケーションからファイルをダウンロードする処理を行っています。 各スレッドは、ダウンロードが開始されたときにメッセージを送信し、ダウンロードが完了したときに2番目のスレッドにメッセージを送信します。両方のメッセージには、2つを関連付けるダウンロードIDプロパティ(guid)があります。サガの参照を最適化する

次のダウンロードを監視するサガがあります。 DownloadStartedイベントによって開始され、タイムアウトを使用してDownloadEndedイベントが時間内に受信されたかどうかを検出します。

私が問題になっているのは、大量のファイルを短時間でダウンロードすると(1分で1000ファイル)、サガのパフォーマンスがそれほど優れていないということです。特定の時間にそれが追いつくのに30分以上かかる。

IFindSagas実装を提供することで、佐賀ルックアップを高速化しようとしました。これは、RavenDBがSagaデータのDownloadIdに自動インデックスを作成する原因となりましたが、FindByメソッドは、そのインデックスが時間内に更新されなかったためにnullを返すことが多かったためです。

私はサガをスピードアップすることができる他の方法はありますか? 私はDownloadIdを唯一のGUIDとして使用していると思っていました。佐賀データのIDプロパティは設定可能ですが、ドキュメントは、具体的に使用したIDを自分...

交通設定すべきではありませんと述べている:MSMQ 永続使用:RavenDB NServiceBusのバージョン:5

答えて

0

私が手直しをサガが不要になるように設定してください。 ファイルをダウンロードするプロセスでは、バックグラウンドで通知を送信するタイマーを開始し、ダウンロードが完了したらタイマーを停止します。これははるかに高速に動作し、より少ないメッセージを送信する原因になります。

using (var timer = new Timer(1000) {AutoReset = true}) 
{ 
    var start = DateTime.Now; 
    timer.Elapsed += (sender, e) => 
         _bus.Send(new NotifyHangingDownload(correlationId, 
                  file.Filename, 
                  start, 
                  TimeSpan.FromMilliseconds(1000))); 
    timer.Start(); 
    client.Download(file, destination, false); 
    timer.Stop(); 
} 
関連する問題