我正在使用tcpClient构建一些用于网络通信的类。我有tcpserver类接受连接并将它们移植到后台线程,因此它可以继续接受该端口上的连接。我可以连接到具有多个客户端的服务器,并从服务器到客户端进行文件传输。在我的开发机器上运行服务器和客户端,我得到了很好的文件传输速度(160 mbps左右 - 我正在使用大数据包大小)。
我正在测试来自多个客户端的越来越大的文件传输,并注意到一件奇怪的事情 - 当尝试发送大文件(> 3gig)时,大约一半的传输开始变慢和波动。如果我尝试发送我的3 gig测试文件(.iso),同时还使用两个或三个其他客户端传输大文件(> 500meg),也在我的开发机器上运行,.iso的传输可能会慢慢爬行留在那里......即使在其他客户完成接收文件之后,也要慢到每秒1兆或更少。它也可以毫无理由地再次看到速度上升,每秒波动在30到80兆之间。
没有任何错误,并且已经筛选了代码,我根本不知道减速可能发生在哪里。
这可能是线程优先事项吗?我必须使用大型变量类型来处理文件传输的一些元素(一个int64用于文件大小,另一个用于记录到目前为止已经进入的字节数等等)...我能看到这些变量的值越大越慢?
非常感谢任何帮助。
答案 0 :(得分:0)
您是否考虑过接收和写入磁盘之间的数据会发生什么?即,您是否将其缓存在内存阵列中,如果是这样,应用程序的内存使用情况与整个系统内存的关系是什么?
答案 1 :(得分:0)
我看到了在LAN上编写文件流时遇到的相同问题。假设您使用文件流来编写文件。尝试在写和读/写访问之间切换访问。我相信它的读/写访问权限不能很好地刷新更改。此外,我喜欢看到文件大小随着文件的编写而增长,但在编写文件之前设置文件长度似乎可以提供更好的性能。