Artigo: 823764 - Última revisão: quarta-feira, 28 de Fevereiro de 2007 - Revisão: 5.6 Ocorre um desempenho lento quando copia dados para um servidor TCP utilizando um programa de API de sockets do Windows
Nesta páginaSintomasQuando executa um programa que utiliza a API de sockets do Windows, poderá detectar um desempenho lento quando copia dados para um servidor TCP. Se efectuar um rastreio de rede com um sniffer de rede como o Microsoft Network Monitor, o servidor TCP envia TCP ACK para o último segmento TCP segmento numa sequência de dados TCP no temporizador de confirmação adiada (também conhecido como o temporizador ACK adiado). Por predefinição, para sistemas operativos Windows, o valor para este temporizador é 200 milissegundos (ms). Um fluxo de dados normal para enviar a 64 quilobytes (KB) de dados é semelhante ao seguinte sequência: bytes Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK .... Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK-PUSH Client->Server 1296 bytes -> delayed ACK 200 ms CausaEste problema ocorre devido ao comportamento arquitectura de API de sockets do Windows e Afd.sys. Este problema ocorre caso se verifiquem as seguintes condições:
Como contornarPara contornar este problema, utilize um dos seguintes métodos. Método 1: Utilizar sockets de bloqueioEste problema ocorre apenas com sockets sem bloqueio. Quando utiliza um socket de bloqueio, este problema não ocorre porque o Afd.sys processa a memória intermédia socket diferente. Para mais informações acerca de socket sem bloqueio de bloqueio e programação, consulte a documentação do Microsoft Platform SDK.Método 2: Criar o tamanho da memória intermédia de envio de socket maiores que o tamanho da memória intermédia de envio do programaPara modificar a memória intermédia de envio de socket, utilize a função de getsockopt dos sockets do Windows para determinar o tamanho de memória intermédia de envio de socket actual (SO_SNDBUF) e, em seguida, utilizar setsockopt função para definir o socket enviar tamanho da memória intermédia. Quando tiver terminado, o valor SO_SNDBUF tem de ser maior do que o tamanho de memória intermédia do programa enviar, pelo menos, 1 byte.Modificar a chamada de Enviar ou a chamada WSASend para especificar uma memória intermédia de tamanho inferior ao valor SO_SNDBUF, pelo menos, 1 byte. No exemplo anterior na secção "Causa" deste artigo, foi possível modificar a chamada setsockopt para o seguinte valor, Método 3: Modificar as definições de TCP/IP no servidor de TCPimportante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:322756
(http://support.microsoft.com/kb/322756/
)
Como efectuar uma cópia de segurança e restaurar o registo no Windows Modificar as definições TCP/IP no servidor TCP para reconhecer imediatamente segmentos TCP recebidos. Esta solução alternativa funciona melhor num ambiente com uma instalação de cliente grande base e em que não é possível alterar comportamento do programa. Em cenários onde o servidor TCP remoto é executado num servidor baseado no Windows, tem de modificar o registo do servidor remoto. Para outros sistemas operativos, consulte a documentação do sistema operativo informações sobre como alterar o temporizador de confirmação adiada. Num servidor com o Windows 2000, siga estes passos:
Método 4: Modificar o comportamento de colocação na memória intermédia no Afd.sys para não bloquear socketsimportante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:322756
(http://support.microsoft.com/kb/322756/
)
Como efectuar uma cópia de segurança e restaurar o registo no Windows Nota Esta chave de registo só está disponível para o Windows Server 2003 com Service Pack 1 e service packs subsequentes.
Ponto Da SituaçãoA Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a". Referências328890
(http://support.microsoft.com/kb/328890/
)
Nova entrada de registo para controlar o comportamento de confirmação TCP (ACK) no Windows XP e no Windows Server 2003 A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 823764
(http://support.microsoft.com/kb/823764/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções de Artigos
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar ao topo