c# - 通过 DSL 发送数据的最佳 block 大小是多少

标签 c# asp.net web-services asmx

我正在使用 .asmx Web 服务从 Windows Mobile 应用程序上传 SQL Server CE 压缩数据库文件。我将数据库分成 1MiB block ,在服务器上重新组装数据库。一旦服务器处理完数据库,就会使用类似的过程将其传输回设备,由移动应用程序驱动。这很好用,但有些用户的 ADSL 连接只允许 ~700Kb 的上传速度。我想优化 block 大小以确保这些用户尽可能获得最佳上传体验。是否有适合 ADSL 的最佳 block 大小?

最佳答案

不同的DSL链接有different packet sizes取决于提供商、网络、用户的偏好和其他因素。从服务器端预测您的用户将拥有什么是不可能的,而且让他们告诉您也很麻烦。

只需通过 TCP 发送数据。该协议(protocol)旨在 self-adjust to the optimal packet size对于客户端和服务器。

如果您将数据分成(大) block 以支持恢复上传,那么您可以算出如果客户不得不重新传输一个 block (例如,如果上传中断),他们将损失多少时间。因此,如果它们在传输 1MiB block 期间被中断,并且它们有 700Kib 上行链路,那么如果它们必须重新传输整个 block ,它们将损失一秒钟多一点。您可以使用它和您测得的完全 TCP 连接失败的概率——套接字被关闭和一个 block 需要重新传输——来计算每个文件的预期重新传输开销。

由于 TCP 故障非常罕见(如果移动连接出现故障,它通常会缓冲并等待发送其余数据),除非您有实时控制循环,否则罕见的 1 秒故障可能不会引起注意。这大概不是整个数据库的上传。

关于c# - 通过 DSL 发送数据的最佳 block 大小是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474135/

相关文章:

java - 获取要执行的php页面上通过ajax传递的值

PHP _GET 问题多次尝试后未刷新数据

c# - 跟踪更改(未保存)的对象

c# - 在 WP7 中发出 http post 请求发送 JSON 文件

c# - 在 C# 中验证复选框和单选按钮

asp.net - 在 asp.net mvc 中使用 Ajax 将文件和文本上传到服务器

javascript - 从 ASP.NET MVC 中的 AngularJS Controller 加载数据,无需加载整个页面

c# - 区分用户更改 Checkbox.Checked 值,还是以编程方式更改

mysql - asp.net中的mysql如何转义?

c# - 从 ASP.NET 4.5 应用程序使用需要 WS-Security 的 Web 服务