缓冲传输本质上比使用WCF流传输慢吗?

时间:2012-12-30 17:47:44

标签: performance wcf streaming buffering

所以在过去我正在处理文件传输应用程序时,我使用了流媒体,而且我似乎能够以最快的速度传输文件,至少可以传输到本地计算机上。

我遇到了问题,虽然文件非常大,超过4GB(我希望任何文件大小都可以,从小到大),并且需要考虑将文件分成更小的块。所以现在我正在研究我的程序的不同版本,并成功地将一个大文件拆分成由某个块大小指定的块(在这种情况下为4MB)。

我通过回调方法将这些文件传输到客户端,但与流式传输相比,传输似乎需要很长时间。

WCF中是否有某些设置可以真正提高邮件传输的性能,或者可能会阻碍我的性能?

    public void RequestFile()
    {
        IFileTransferCallback callback = OperationContext.Current.GetCallbackChannel<IFileTransferCallback>();

        while (chunkedFile.MoreChunks)
        {
            callback.ReceiveFile(chunkedFile.NextChunk(), chunkedFile.MoreChunks);
        }

        host.Close();
    }

这些是我现在正在使用的绑定设置。有些只是随意设置。

        NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, true);
        binding.MaxBufferPoolSize = int.MaxValue;
        binding.ReaderQuotas.MaxDepth = int.MaxValue;
        binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
        binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
        binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
        binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
        binding.MaxBufferSize = int.MaxValue;
        binding.MaxConnections = 500;
        binding.MaxReceivedMessageSize = int.MaxValue;
        binding.TransferMode = TransferMode.Buffered;
        binding.SendTimeout = new TimeSpan(0, 5, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 5, 0);
        BindingElementCollection collection = binding.CreateBindingElements();
        collection.Add(new MtomMessageEncodingBindingElement());

        UnityContainer.RegisterInstance(typeof(Binding), binding);

修改

我一直在努力寻找提高速度的各种选择。当我运行服务器localhost时,它可以在几秒钟内完成一个700mb的文件,显然......但是当我使用我的外部IP时,它需要花费相当多的时间,比我的15mbps上传速度应该允许的时间更长。

发生了什么事? WCF的速度是否存在硬性上限?我该如何解锁?当然它可以比现在更快。我不能老实说我的数据传输速度有多快,因为我还不知道如何计算它,但它可能大约在250kbps左右。

第二次修改:

我再次设置了一个流媒体系统,但是利用了我的块。所以我正在整理更大的文件。

通过互联网上的64mb块我只需要在11分30秒内将一个862mb的文件流式传输给自己。我的下载速度最高为25mbps,上传速度约为5mbps。我觉得这很不错。

令人遗憾的是,我无法通过缓冲流模式获得这些速度。

这是为什么?为何如此限制?为什么流媒体这么快?

更多信息

将块大小从64减少到8然后再减少到4并最终减少到2会产生更快更快的结果,对于2mb块大小,文件传输 862mb,2分钟。我无法通过缓冲传输模式获得这样的任何东西。

0 个答案:

没有答案