Como melhorar o desempenho do WCF Data Services

Eu sou novo no WCF Data Services, por isso estou jogando. Após alguns testes iniciais, estou decepcionado com o desempenho do meu serviço de dados de teste.

Percebo que, como um WCF DS é baseado em HTTP, há uma sobrecarga inerente ao protocolo, mas meus testes ainda são muito mais lentos do que eu esperava:

Meio Ambiente:

Tudo em uma caixa: laptop quad-core de 64 bits com 4 GB de RAM executando o W7. Máquina decente.Banco de dados SQL pequeno (SQLExpress 2008 R2) com 16 tabelas ... a tabela em teste possui 243 linhas.Hospedou meu serviço de teste no IIS com todos os padrões.

Código:

Eu criei um modelo do Entity Framework (DataContext) para este banco de dados (código de estoque do VS2010).Eu criei um serviço de dados com base nesse modelo.Eu criei um cliente que possui uma referência de serviço direta (ObjectContext) para este serviço (código de estoque do VS2010)No cliente, também posso chamar o modelo EF diretamente e também usar o SQL nativo (ADO.NET SqlConnection)

Plano de teste:

Cada iteração se conecta ao banco de dados (existe uma opção para reutilizar as conexões), consulta todas as linhas na tabela de destino ("EVENTS") e as conta (forçando assim qualquer busca adiada a ser executada).Execute para 25 iterações cada, para SQL nativo (SqlConnection / SqlCommand), Entity Framework (DataContext) e WCF Data Services (ObjectContext).

Resultados:

25 iterações do SQL nativo: 436ms25 iterações do Entity Framework: 656ms25 iterações do WCF Data Services: 12110ms

Ai. Isso é cerca de 20x mais lento que o EF.

Como o WCF Data Services é HTTP, não há oportunidade para reutilizar a conexão HTTP; portanto, o cliente é forçado a se reconectar ao servidor da web para cada iteração. Mas certamente há mais coisas acontecendo aqui do que isso.

A própria EF é bastante rápida e é o mesmo código / modelo da EF reutilizado para os testes de serviço e de cliente direto para a EF. Haverá alguma sobrecarga para serialização e desserialização de XML, no serviço de dados, mas isso é demais!?! Eu tive um bom desempenho com a serialização de XML no passado.

Vou executar alguns testes com as codificações JSON e Protocol-Buffer para ver se posso obter melhor desempenho, mas estou curioso para saber se a comunidade tem algum conselho para acelerar isso.

Eu não sou forte com o IIS, então talvez haja alguns ajustes do IIS (caches, conjuntos de conexões etc.) que possam ser configurados para melhorar isso?

questionAnswers(8)

yourAnswerToTheQuestion