什么影响了sendto()的性能解决方法

什么影响了sendto()的性能
for (int i=0; i<fileBlockNumber; i++) {

    sendto( System::udpSocket, msgData, msgLength, 0, (sockaddr*)&remoteaddr, sizeof(remoteaddr) );

}

我发送144M文件,循环发送,每次1K。如果向本机发送,使用sendto()语句,花了7秒,而注释调sendto语句,则只用了3秒。

如果我向局域网内的一台机器发送,使用sendto()语句,花了50秒左右,也就是每秒2M(这里是发送,而不是接收,所以估计有问题),而注释调sendto语句,则只用了3秒左右。

也就是只要注释调sendto()性能就大幅度提示,那么估计问题就出现在sendto()上了。

请问怎么提高sendto()性能。


------解决方案--------------------
如果lz单纯的想提高数据发送效率,我想首先应该修改的是一次发送的数据包的大小,因为它与网络带宽有直接的关系。
------解决方案--------------------
注释掉sendto语句和没注释掉差别未免也太大了吧,注释掉了你就不会发送了啊。和发送比较没什么意义啊。


我觉得提高sendto的性能,可以尝试一次发送的数据大一点。
------解决方案--------------------
我想你说了些fh。你想提高sendto的效率,这里我有一个问题,如果你解决的话,可以继续下面的解答。用sendto发送的144M数据内容,你接收的时候,按照编号重新排列了吗?考虑一下udp可是不可靠传输。不然你接收的包也是毫无意义的呀!

再说你的问题,sendto的效率要考虑到很多问题,比如说缓冲区大小,理论上有个阀值,阀值附近时是传输的上限,这个阀值根据具体环境而定,跟系统和网络I/0紧密相关。


------解决方案--------------------
建议不要使用一个线程发送.
采用多线程,还有发送包的大小选择,也很关键.
------解决方案--------------------
TCP发送,数据在发送到网卡前会自动组包的,这样能够优化效率。
UDP发送的话,你要以MTU的大小来发送,绝对比TCP发送快!
------解决方案--------------------
有接收的时候,会快一点。