2011-12-25 48 views
0

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

我正在测试来自多个客户端的越来越大的文件传输,并且发现了一件奇怪的事情 - 当尝试发送大文件(> 3gig)时,大约一半的传输速度开始缓慢并波动。如果我尝试发送我的3 gig测试文件(一个.iso),同时还使用两台或三台其他客户端传输大文件(> 500meg),同时也在我的开发机器上运行,则.iso的传输可能会放慢抓取并停留那里...即使在其他客户完成接收文件之后,每秒1Mg甚至更低也是如此。无论如何,我也可以再次看到速度提升,并在每秒30至80兆克之间波动。

有没有错误,并通过代码筛选,我只是不知道放缓可能发生的地方。

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

任何帮助将不胜感激。

+0

好的......如果我在到达客户端时没有真正写入文件字节,我根本没有任何这些问题。当我尝试将字节实际写入客户端中的文件时发生了一些情况。我只是用FileStream写一个字节数组... – Pete 2011-12-25 21:43:54

回答

0

您是否考虑过接收和写入磁盘之间的数据会发生什么变化?即您是否将其缓存到内存数组中,如果是的话,您的应用程序的内存使用情况相对于整个系统内存是多少?

+0

另外,我注意到,当我复制> 3gig .iso时,减速似乎发生,就像文件大小跨越2个演出边界一样。从那里直到文件结尾,我有很多奇怪的东西。网络速度波动(我认为是文件写入速度问题)... – Pete 2011-12-26 16:13:26

+0

我正在使用网络流和字节数组读取字节。当字节数组充满当前数据包时,我将其交给要写入的文件流。 – Pete 2011-12-26 16:17:27

+0

随着服务器和三个客户端运行在Visual Studio中,它使用了28兆左右。我在机器上有12场演出。 – Pete 2011-12-26 16:27:11

0

我看到了在通过局域网编写文件流时遇到的问题。假设您正在使用文件流来写入文件。尝试在写入和读取/写入访问之间切换访问。我相信这是读/写访问,它不能很好地清除更改。另外,我喜欢在文件写入时看到文件大小的增加,但在写入文件之前设置文件长度似乎会提高性能。