これは私が遭遇した本当に奇妙なバグであり、WinRTフレームワークの制限のようです。この問題を再現するためのコードはスペースを取りすぎるので、できる限り説明します。私のアプリケーションでは、UIは、いくつかの静的TextBlock、不確定なプログレスバー、確定的なプログレスバー、および1秒ごとに更新されるステータスTextBlockで構成されています。
DatagramSocket
高速(〜30Mbps)でUDPパケットをダウンロードする場合、ネットワーク層とアプリケーション層の間で大幅なパケット損失(> 60%)が発生します。ダウンロードの実行中にパケットトレース(netsh traceなど)を実行すると、ネットワーク層が受信しているすべてのパケットがアプリケーション層ではないことが明らかになるため、これはアプリケーション層にあると言えます。
MessageReceived
WinRTフレームワークは、コールバック関数を起動する必要がある速度に追いつくことができないと思います。UDPダウンロードで何らかのバッファリングを実行する手段が見つかりませんでした。UDPパケットを受信するために私が見つけた唯一の方法は、個々のパケットごとに起動されるコールバック関数です。
この場合も、このアプリケーション層のパケット損失は、約30Mbpsのダウンロード速度で発生します。10Mbpsのような低速では見られません。
他の誰かがこの問題に遭遇したことがありますか、またはUDPダウンロードを実行するときにバッファリングを実行する方法を知っている人はいますか?