XMLドキュメントをクライアントから要求されたデータと交換するクライアントサーバーアプリケーションがあります。基本的に、ユーザーはいくつかの検索制約(一致する属性)を入力し、クライアントは2つのシステムと通信してデータを取得します(データベースからのデータとファイルサーバーからのデータ)。
ファイルサーバーから返されるデータ(アーカイブされたデータのファイル)は、サーバーから返されるメタデータよりもかなり大きく、それに応じて実行に時間がかかります。
ユーザーから、アーカイブデータのダウンロードにかかる時間とダウンロード速度(ダウンロード後)に関するいくつかのメトリックを提供するように求められました。
クライアントサーバーは非同期I/Oおよび多数のスレッドと通信するため、これを実現するために開始/停止タイマーを使用することはできません。
私の現在の実装は次のように機能します。
- 現在のティックを記録します(これは長時間実行されるプロセスであるため、ティックの解決は問題ありません)
- リクエストを非同期的にWebサービスに渡します。
- - - 待って - -
- 現在のティックを取得します
- 返されたドキュメントのサイズを取得します(SOAPエンベロープからは考慮されていないオーバーヘッドがありますが、これは問題ないと思います)
- レート=(ドキュメントサイズ/ 1024)/(終了ティック-開始ティック)*ティック/秒(タイムスパンオブジェクトにこれを実行させます)
最初はこの方法で問題ないと思いましたが、ユーザーからは、大きなサンプルよりも小さなサンプルの方がレートがはるかに低く、1回の実行でレートが大きく異なると報告されています。
これに影響されにくいこのレートを計算するためのより良い方法はありますか?アーカイブが大きいほどレートが高くなることは理にかなっていますが、テストでは、ファイルのサイズよりも10〜40倍高いことがわかります。これは意味がありません。