5

StreamSocket我有一个 WinRT 应用程序,它使用和执行上传DataWriter。它跟踪上传所用的时间,然后计算吞吐量。

我遇到的问题是我的吞吐量比 Wireshark 显示的要高得多。这是因为我的上传循环完成并在 WinRT 框架实际将数据发送到网络层之前获取结束时间戳。我发现无法从框架接收数据包实际到达网络层的确认。该DataWriter StoreAsync方法仅返回您存储的字节数,这是我在存储它们之前就知道的。

其他框架(例如 Windows Phone)有一个回调,它会在您的数据包发送后触发,并告诉您上传了多少字节。我在 WinRT 中没有找到任何等价物,我不得不接受一个循环来记录我在StoreAsync函数中提交了多少字节。

有没有办法从框架中确认何时以及实际发送了多少字节到网络层?

更新:我尝试了@polkduran 的建议,虽然它们帮助减轻了一些数据包丢失,但在较小的文件上传 (100KB) 中我仍然遇到严重的数据包丢失。对于较大的文件(4MB 和 10MB),所有数据包都在发送,但结束时间仍然相差几秒钟,这会显着扭曲吞吐量计算(与 Wireshark 跟踪相比)。我的猜测是回调只是稍微减慢了上传速度,而不是提供实际的数据包上传确认。

我仍在寻找解决此问题的方法。

编辑:我与微软创建了一个关于这个问题的支持票。他们的官方回应是在 WinRT 框架中没有办法确认一个数据包实际上已经被上传。

4

1 回答 1

2

我没有尝试过,但是您可以在对象的方法返回的Completed回调属性中分配一个处理程序。DataWriterStoreOperationStoreAsyncDataWritter

或者

您可以直接使用返回操作的属性中的WriteAsync方法。OutputStreamStreamSocketIAsyncOperationWithProgress

于 2013-03-05T16:20:51.653 回答