PDA

Ver la Versión Completa : Velocidad Firedac Vs ADO


oscarac
04-09-2017, 23:19:51
recientemente instale Xe7 y quise comprobar la conexión Firedac (Natica segun entiendo), me habían dicho que es mucho mas rápida, asi que hice una prueba simple

me conecté mediante Firedac y Ado a una misma base de datos, accediendo a la informacion de una tabla con 38,900 registros
aqui los comentarios

En modo diseño, la conexión de Firedac demoro menos de 1 segundo, mientras que Ado demoro unos 4 segundos
hice un barrido de la data y mientras en Ado se demoro 9 segundos, en Firedac solo demoro 2

preguntas...

que tan potente es Firedac comparado con Ado o con otros "componentes" para acceder o recopilar informacion en bases de datos grandes?

esta fue la prueba que hice

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MSSQL,
FireDAC.Phys.MSSQLDef, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, Vcl.StdCtrls, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
Vcl.Grids, Vcl.DBGrids, Data.Win.ADODB, FireDAC.VCLUI.Wait, FireDAC.Comp.UI,
Vcl.ExtCtrls;

type
TForm1 = class(TForm)
FDConnection1: TFDConnection;
FDQuery1: TFDQuery;
Button1: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
FDConnection1.Connected := False;
FDConnection1.Connected := True;
FDQuery1.OpenOrExecute;
Label1.Caption := TimeToStr(time);
FDQuery1.First;
while not FDQuery1.eof do
Begin
FDQuery1.Next;
End;
Label2.Caption := TimeToStr(time);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOConnection1.Connected := False;
ADOConnection1.Connected := True;
ADOQuery1.Open;
adoQuery1.First;
Label3.Caption := TimeToStr(time);
while not adoQuery1.eof do
Begin
adoQuery1.Next;
End;
Label4.Caption := TimeToStr(time);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.Connected := False;
FDConnection1.Connected := False;
end;

end.


aunque cambiando esta parte
visto en esta pagina

http://edn.embarcadero.com/article/27790


ADOQuery1.First;
Label5.Caption := TimeToStr(time);
while Not ADOQuery1.Recordset.EOF do
begin
ADOQuery1.Recordset.Movenext;
end;
Label6.Caption := TimeToStr(time);


Con ADO demoro menos de 1 segundo, aunque el registro no se mueve..

Casimiro Notevi
05-09-2017, 00:04:52
Pero esa prueba es poco práctica, ¿alguna vez hace falta hacer eso "en el mundo real"?
Deberías hacer algunos selects aleatorios, por ejemplo, y cosas así.

oscarac
05-09-2017, 00:20:42
Pero esa prueba es poco práctica, ¿alguna vez hace falta hacer eso "en el mundo real"?
Deberías hacer algunos selects aleatorios, por ejemplo, y cosas así.

mmmmm quizá para algunos procesos contable podría ser, y si, también estoy haciendo pruebas con consultas
solo quería saber si alguien mas tiene conocimiento o sabe con ejemplos 100% prácticos si el tema de la velocidad es real

juniorSoft
10-05-2019, 18:14:52
La configuración del cursor de los componentes ADO indica que tan rapido o lento se ejecutaran las consultas, pero en mi caso le doy el voto a Firedac, son una evolución de los componentes de acceso a datos muy completo que tienen soluciones sencillas a tareas complejas. En cuanto a la rapidez también influyen muchos factores y los controladores que se estén utilizando.

Saludos,