EntityFramework vs NHibernate

UPDATE
Pessoal, fiz uma alteração no código, pois eu estava incrédulo com os números e resolvi estudar um pouco mais o funcionamento do EF. E sim, ele pode ser rápido!

Desabilitei o controle automático de alteração conforme sugerido no site da Microsoft - Entity Framework Automatic Detect Changes

O tempo que era de em média 40 segundo pra inserir 10.000 registros, passou a ser de 3 segundos aproximadamente. No contexto do meu teste, desabilitar esse controle automático é válido. Pode haver alguma implicação quando estivermos tratando de um ambiente mais complexo e principalmente quando estivermos lidando com operações de entidade relacional. Farei uma análise mais aguda sobre o comportamento do EF ao desabilitarmos o Auto Detect Changes. Assunto para um próximo post.

Vejam o trecho do código onde executo o insert.

using (var Db = new EntityContext())
{
    Db.Configuration.AutoDetectChangesEnabled = false;
    for (int i = 1; i <= qtde; i++)
    {
        Aluno t = new Aluno { Nome = "Dom Pedro " + i, Matricula = i };
        Db.Alunos.Add(t);
    }
    Db.Configuration.AutoDetectChangesEnabled = true;
    Db.SaveChanges();
}

Resultado:
Desempenho-EntityFramework-vs-NHibernate

E fica a dica... Estudar, entender e melhorar sempre!

Download do projeto atualizado

Até mais!

---------FIM UPDATE-----------

Embora muitos sites já tenham feito o benchmarking entre os principais ORM's de mercado, eu resolvi fazer o meu código pra avaliar o desempenho entre o EntityFramework e o NHibernate.

O teste mede o tempo em milisegundos pra fazer uma operação de INSERT em uma única tabela no banco MSSQL. Optei por manter os projetos bem enxutos criando uma única entidade, Aluno, com três propriedades e fazendo o mapeamento utilizando o Fluent NHibernate e Entity Framework Fluent API.

Os tempos medidos foram de 100, 1.000 e 10.000 registros. Não preciso dizer muito, os números falam por si só. Vejam...

OBS.: Números do teste abaixo com
Entity-Framework-vs-NHibernate

Por algum momento eu achei que tinha algo de errado no meu código. Mas acho que não...estou disponibilizando o mesmo para download

Gosto de trabalhar com o Entity Framework, mas ainda está devendo muito em performance. Tenho certeza que a MS está trabalhando pra tornar o EF mais performático.

Pra rodar na sua máquina:
1 - Crie o BD primeiro pro NHibernate criar apenas a tabela ( Sorry for that... eu não consegui criar o banco pelo NHibernate, talvez tenha algum modo de fazê-lo). Ponto para o EF, ele faz tudo sozinho se você quiser...
2 - Configure no Startup Project "TestPerformance" a connectionstring pro seu ambiente lá no App.config.

Abraços. Até a próxima!

Leave a Reply

Your email address will not be published. Required fields are marked *

This blog is kept spam free by WP-SpamFree.