我正在使用 .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/