【问题标题】:Odd slowdown in file transfer using tcpClient使用 tcpClient 文件传输的奇怪减速
【发布时间】:2011-12-25 18:03:07
【问题描述】:

我正在使用 tcpClient 构建一些用于网络通信的类。我有 tcpserver 类接受连接并将它们改组到后台线程,以便它可以继续接受该端口上的连接。我可以使用多个客户端连接到服务器,并从服务器到客户端进行文件传输。在我的开发机器上同时运行服务器和客户端,我获得了不错的文件传输速度(160 mbps 左右 - 我正在使用大数据包大小)。

我正在测试来自多个客户端的越来越大的文件传输,并注意到一个奇怪的事情 - 在尝试发送大文件 (>3gig) 时,传输大约一半开始变慢和波动。如果我尝试发送我的 3 gig 测试文件(一个 .iso),同时还使用两个或三个其他客户端传输较大的文件(>500meg),也在我的开发机器上运行,.iso 的传输可能会慢到爬行并停留那里...慢到每秒 1 兆或更少,即使在其他客户端完成接收他们的文件之后也是如此。它也可能无缘无故地再次加快速度并在每秒 30 到 80 兆欧之间波动。

没有错误,并且在筛选了代码后,我只是不知道减速可能发生在哪里。

这可能是线程优先级的事情吗?我必须使用大型变量类型来处理文件传输的一些元素(一个 int64 用于文件大小,另一个用于记录到目前为止已进入的字节量等)......我能看到随着这些变量的值变大而减速?

任何帮助将不胜感激。

【问题讨论】:

  • 好的...如果我在文件字节到达我的客户端时实际上没有写入文件字节,那么我根本没有这些问题。当我尝试将字节实际写入客户端中的文件时,发生了一些事情。我只是使用 FileStream 来写一个字节数组...

标签: windows vb.net file tcpclient


【解决方案1】:

您是否考虑过数据在接收到写入磁盘之间会发生什么?即,您是否将其缓存在内存数组中,如果是的话,您的应用程序的内存使用情况与您的系统总内存有关吗?

【讨论】:

  • 另外,我注意到当我复制 >3gig .iso 时似乎会发生减速,就像文件大小越过 2 gig 边界一样。从那里到文件结束,我有很多陌生感。网速波动(我认为是文件写入速度问题)...
  • 我正在使用网络流和字节数组读取字节。当字节数组充满当前数据包时,我将其交给要写入的文件流。
  • 服务器和三个客户端在visual studio中运行,它使用28兆左右。我的机器里有 12 个演出。
  • 我使用的是 Windows 7...drm 也许?
  • 如果它是 DRM,我会很惊讶。这似乎是一个非常奇怪的错误。我是 networkComms.net 的作者之一,这是一个开源的 c# 网络通信框架,尽管我们遇到了很多问题,但肯定不是其中之一。我的建议是通过性能分析器同时运行客户端和服务器。 Visual Studio 2010 中的那个是最好的。然后只需查看速度较慢的时间片,这可能有助于指出性能瓶颈。
【解决方案2】:

我看到了您在通过 LAN 写入文件流时遇到的相同问题。假设您正在使用文件流来写入文件。尝试在写和读/写访问之间切换访问。我相信它是读/写访问,它不能很好地刷新更改。我也喜欢看到文件大小随着文件的写入而增长,但在写入文件之前设置文件长度似乎可以提供更好的性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2020-03-06
    • 2021-01-29
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多