Witam wszystkich!
Ostatnio miałem trochę problemy z BDE, dlatego zacząłem poważnie zastanawiać się nad jakąś alternatywą.
Wrzuciłem sobie na formatkę komponenty do InterBase/Firebirda i przystosowałem program do ich uzywania zamiast komponentów BDE, ale zauważyłem, że chodzi masakrycznie wolno. Dlatego pokusiłem się o mały test dodawania do bazy 100000 rekordów
Zawsze czytałem, że BDE jest do kitu, wolne, toporne itp, ale wyniki mnie całkowicie zaskoczyły.
Zrobiłem porównanie dwóch metod: przez Append i przypisywanie zmiennym wartości ręcznie, oraz przez INSERT w zapytaniu. Oto, co mi wyszło:
BDE Append------------------------------------0001
FireBird Append-------------------------------0020
BDE INSERT------------------------------------0003
FireBird INSERT-------------------------------0036
Co o tym myślicie?
Poniżej procedury, których użyłem:
void __fastcall TfMainForm::btnFBINSERTClick(TObject *Sender)
{
DM->tIBMegaTest->EmptyTable();
CTimeMsr tmTime;
tmTime.Start();
for(int i=0;i<100000;i++)
{
DM->qIBQuery->SQL->Clear();
AnsiString sSQL = "INSERT INTO MEGATEST (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9, VAR10, VAR11, VAR12, VAR13, VAR14, VAR15, VAR16) \
VALUES ('"+IntToStr(i+1)+"','Lorem','ipsum ','dolor','sit','200','100.10','15345.33','12121.09','84763943.44','123434.1234','39474.1234','994837.4456','84756.334','7746592.3434','100')";
DM->qIBQuery->SQL->Add(sSQL);
DM->qIBQuery->ExecSQL();
}
memoLog->Lines->Add("FireBird INSERT-------------------------------"+tmTime.Stop());
}
void __fastcall TfMainForm::btnBDEINSERTClick(TObject *Sender)
{
DM->tMegaTest->DatabaseName = sDbDir;
DM->tMegaTest->EmptyTable();
DM->qQuery->DatabaseName = sDbDir;
CTimeMsr tmTime;
tmTime.Start();
for(int i=0;i<100000;i++)
{
DM->qQuery->SQL->Clear();
AnsiString sSQL = "INSERT INTO MEGATEST (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9, VAR10, VAR11, VAR12, VAR13, VAR14, VAR15, VAR16) \
VALUES ('"+IntToStr(i+1)+"','Lorem','ipsum ','dolor','sit','200','100.10','15345.33','12121.09','84763943.44','123434.1234','39474.1234','994837.4456','84756.334','7746592.3434','100')";
DM->qQuery->SQL->Add(sSQL);
DM->qQuery->ExecSQL();
}
memoLog->Lines->Add("BDE INSERT------------------------------------"+tmTime.Stop());
}
void __fastcall TfMainForm::btnFBAppendClick(TObject *Sender)
{
DM->tIBMegaTest->EmptyTable();
DM->tIBMegaTest->Open();
CTimeMsr tmTime;
tmTime.Start();
for(int i=0;i<100000;i++)
{
DM->tIBMegaTest->Append();
DM->tIBMegaTestVAR1->AsString = IntToStr(i+1);
DM->tIBMegaTestVAR2->AsString = "'Lorem'";
DM->tIBMegaTestVAR3->AsString = "'ipsum '";
DM->tIBMegaTestVAR4->AsString = "'dolor'";
DM->tIBMegaTestVAR5->AsString = "'sit'";
DM->tIBMegaTestVAR6->AsString = "200";
DM->tIBMegaTestVAR7->AsString = "100,10";
DM->tIBMegaTestVAR8->AsString = "15345,33";
DM->tIBMegaTestVAR9->AsString = "12121,09";
DM->tIBMegaTestVAR10->AsString = "84763943,44";
DM->tIBMegaTestVAR11->AsString = "123434,1234";
DM->tIBMegaTestVAR12->AsString = "39474,1234";
DM->tIBMegaTestVAR13->AsString = "994837,4456";
DM->tIBMegaTestVAR14->AsString = "84756,334";
DM->tIBMegaTestVAR15->AsString = "7746592,3434";
DM->tIBMegaTestVAR16->AsString = "100";
DM->tIBMegaTest->Post();
}
memoLog->Lines->Add("FireBird Append-------------------------------"+tmTime.Stop());
DM->tIBMegaTest->Close();
}
void __fastcall TfMainForm::btnBDEAppendClick(TObject *Sender)
{
DM->tMegaTest->EmptyTable();
DM->tMegaTest->Open();
CTimeMsr tmTime;
tmTime.Start();
for(int i=0;i<100000;i++)
{
DM->tMegaTest->Append();
DM->tMegaTestVAR1->AsString = IntToStr(i+1);
DM->tMegaTestVAR2->AsString = "'Lorem'";
DM->tMegaTestVAR3->AsString = "'ipsum '";
DM->tMegaTestVAR4->AsString = "'dolor'";
DM->tMegaTestVAR5->AsString = "'sit'";
DM->tMegaTestVAR6->AsString = "200";
DM->tMegaTestVAR7->AsString = "100,10";
DM->tMegaTestVAR8->AsString = "15345,33";
DM->tMegaTestVAR9->AsString = "12121,09";
DM->tMegaTestVAR10->AsString = "84763943,44";
DM->tMegaTestVAR11->AsString = "123434,1234";
DM->tMegaTestVAR12->AsString = "39474,1234";
DM->tMegaTestVAR13->AsString = "994837,4456";
DM->tMegaTestVAR14->AsString = "84756,334";
DM->tMegaTestVAR15->AsString = "7746592,3434";
DM->tMegaTestVAR16->AsString = "100";
DM->tMegaTest->Post();
}
memoLog->Lines->Add("BDE Append------------------------------------"+tmTime.Stop());
DM->tMegaTest->Close();
}
Pozdrawiam
kappa