5

と を使用してアップロードを実行する WinRT アプリケーションがありStreamSocketますDataWriter。アップロードにかかる時間を追跡し、スループットを計算します。

私が抱えている問題は、Wireshark が示すよりもはるかに高いスループットを得ていることです。これは、WinRT フレームワークが実際にネットワーク層にデータを送信する前に、アップロード ループが終了し、終了タイムスタンプを取得するためです。フレームワークから、パケットが実際にネットワーク層に到達したという確認を受け取る手段が見つかりませんでした。このDataWriter StoreAsyncメソッドは、保存したバイト数のみを返します。これは、保存する前に知っていました。

Windows Phone などの他のフレームワークには、パケットが送信された後にトリガーされるコールバックが用意されており、アップロードしたバイト数を通知します。StoreAsyncWinRT で同等のものを見つけられず、関数でコミットしたバイト数を記録するループに落ち着かなければなりませんでした。

フレームワークから、実際にネットワーク層に送信されたバイト数とバイト数を確認する方法はありますか?

更新: @polkduran の提案を試してみました。それらはパケット損失の一部を軽減するのに役立ちましたが、小さなファイルのアップロード (100KB) でまだ重大なパケット損失が発生しています。より大きなファイル (4MB および 10MB) の場合、すべてのパケットが送信されますが、終了時間はまだ数秒ずれているため、スループットの計算が大幅に歪められます (Wireshark トレースと比較した場合)。私の推測では、実際のパケット アップロードの確認を提供するのではなく、コールバックがアップロードを少し遅くしただけです。

私はまだこの問題の解決策を探しています。

編集: この問題について Microsoft でサポート チケットを作成しました。彼らの公式の回答は、WinRT フレームワークには、パケットが実際にアップロードされたことを確認する方法がないというものです。

4

1 に答える 1

2

私は試していませんが、オブジェクトのメソッドによって返されるCompletedコールバック プロパティにハンドラーを割り当てることができます。DataWriterStoreOperationStoreAsyncDataWritter

または

操作を返すプロパティのWriteAsyncメソッドを直接使用できます。OutputStreamStreamSocketIAsyncOperationWithProgress

于 2013-03-05T16:20:51.653 に答える