Prezados amigos, resolvi fazer um teste comparativo de
velocidade entre algumas suíte de acesso a dados do Delphi. Minha ideia inicial era fazer um comparativo
entre o tão falado FireDAC e o DBX. Fiquei surpreso com o resultado, mas foi
uma surpresa um tanto decepcionante quanto ao FireDAC. No teste que fiz ele é surpreendentemente
lento. Pode ser que haja alguma configuração que eu não tenha feito, mas por
default, ele não foi bem. Abaixo segue a metodologia e em seguida os
resultados.
Metodologia
Criei uma simples aplicação com os componentes de acesso
e fiz um loop com FOR de 1 ate 10000 com INSERTs.
Abaixo segue o trecho do código:
for I
:= 1 to SpinEdit1.Value do
begin
ClientDataSet1.Append;
ClientDataSet1ID.Value := i;
ClientDataSet1TEXTO.Value := '0123456789001234567890';
ClientDataSet1TEMPO.Value :=
now;
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(0);
end;
ClientDataSet1.Close;
Essa arquitetura foi utilizada, pois é assim que utilizo
no meu desenvolvimento em 3 camadas com o DataSnap. O ClientDataSet roda no
lado cliente e no lado servidor há um provider e o componente de acesso a
dados.
Utilizei o banco de dados FireBird porque creio que seja
um dos mais comuns na comunidade e sua instalação é bastante simples de
realizar.
A
tabela no banco contem apenas três campos: ID interger, TEXTO varchar, TEMPO
Time; Para cada registro gravado é fornecido o ID, um texto padrão e no campo
tempo vai o momento da em que os campos são atribuídos, utilizando a função NOW
como visto no código acima. Após isso é verificado no banco de dados a relação
de tempo entre o primeiro registro gravado e o último, obtendo-se assim o tempo
gasto para serem feitos todos os inserts. Outros parâmetros do ambiente do teste:
Versão Delphi: XE5 Trial
Computador: Notebook Dell i5 Windows 64 bits
Versão Firebird: 2.5.1 32 bits
Rede: Servidor local, não foi utilizado rede
Computador: Notebook Dell i5 Windows 64 bits
Versão Firebird: 2.5.1 32 bits
Rede: Servidor local, não foi utilizado rede
Resultados
Aqui segue a tabela de resultados entre as 3 suites
testadas ate agora, e uma variação do DBX, gravação com SQLQuery e com
SQLDataSet:
FireBird 2.5 32 Bits
|
||
Componente
|
INSERT=10000 (segundos)
|
|
DBX/Query
|
28
|
|
DBX/DataSet
|
27
|
|
FireDAC
|
274
|
|
IB
|
30
|
Note que no geral a pouca diferença entre as suítes, exceto
o FireDAC que é extremamente lento comparado com outros. Pode ser que seja
somente com o Firebird? –Talvez, foi um teste que fiz, repito de forma simples
para uma avaliação inicial. Para ver as primeiras impressões, bem, eu não estou
feliz com o que vi e irei procurar me aprofundar mais no assunto para ver o que
pode ser melhorado.
Novos teste
Estou prevendo realizar novos testes, quero incrementar outros
componentes no comparativo, por tanto aceito sugestões(Coloquem nos comentários
ou enviem um e-mail para jnelson3@ig.com.br).
E brevemente quero testar com outros
bancos de dados e outros e outros comando como Update e Select que são os mais
utilizados.
Conclusão
Fiquei realmente decepcionado com o FireDAC, li que ele integrou
ao Delphi para ser o padrão, então irei buscar mais informações para saber o que
está ocorrendo de errado. Por hora posso
dizer que foi chocante a lentidão. Não recomendo ninguém a mudar por enquanto.
Descobriu o que tem de errado com o firedac?
ResponderExcluir