如何计算上传大文件的最佳分块大小

22

是否有一种最佳的块大小来处理大文件?我有一个上传服务(WCF),用于接受从几百兆字节到几千兆字节不等的文件上传。

我尝试了4KB、8KB甚至1MB的块大小。较大的块大小对性能(更快的处理速度)有好处,但是代价是内存消耗。

那么,在上传文件时是否有方法来确定最佳的块大小呢?如何进行这样的计算?它会是可用内存和客户端、CPU以及网络带宽的组合,决定最佳大小吗?

谢谢。

编辑:可能需要提到客户端应用程序将使用Silverlight。

1个回答

8
如果您担心资源不足,那么最佳方案可能是通过评估您的上传并发峰值与系统可用内存来确定。您同时进行的上传数量将是任何计算中关键的变量。您只需要确保有足够的内存来处理上传并发,这是相当简单的。内存很便宜,您很可能在并发超过内存可用性的点之前耗尽网络带宽。

在性能方面,这不是您在应用程序设计和开发期间可以真正优化的事情。您必须建立系统,让用户上传真实文件,然后您可以监视实际运行时性能。

尝试使用与您的网络TCP/IP窗口大小匹配的块大小。这大约是您在设计时真正需要达到的最佳状态。


3
我更多地是指客户端机器(我们无法控制)。如果我将块大小设置为1MB,它将耗尽客户端机器上的所有内存。但是,如果我将其设置得太低,则处理时间会很长。 - Fixer
4
哦!使用客户端机器会更简单。并发性几乎不存在。只要你在获取数据后不将其保留在内存中,你几乎可以使用任何块大小。只要您在获取每个块后将位流式传输到存储中,即使是现代手机也具有足够的CPU和内存来处理一些文件。我怀疑您仅基于块大小就会在应用程序级别上看到任何显着的性能差异。对于大文件,我建议使用1024KB,并结束讨论。 - Stephen M. Redd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接